在SCO下编程获取网卡MAC地址

文章作者 100test 发表时间 2008:03:18 15:08:23
来源 100Test.Com百考试题网


#include
  #include
  #include
  #include
  #include
  #include
  
  int main(int argc, char *argv[])
  {
  struct strioctl strioc.
  u_char ether_addr[6].
  int s.
  
  if (argc != 2) {
  fprintf(stderr, "usage: %s deviceFile\n", argv[0]).
  exit (1).
  }
  
  bzero(ether_addr, sizeof(ether_addr)).
  
  if ((s = open(argv[1], 0)) < 0) {
  perror(argv[1]).
  exit(1).
  }
  strioc.ic_cmd = MACIOC_GETADDR.
  strioc.ic_timout = -1.
  strioc.ic_len = sizeof(ether_addr).
  strioc.ic_dp = (caddr_t) ether_addr.
  if (ioctl(s, I_STR, (char *)&.strioc) < 0) {
  perror("I_STR: MACIOC_GETADDR").
  exit(1).
  }
  
  printf("%s is using address x:x:x:x:x:x\n",
  argv[1],
  ether_addr[0], ether_addr[1], ether_addr[2],
  ether_addr[3], ether_addr[4], ether_addr[5]
  ).
  
  exit(0).
  }
  
  /********************************** end *********************************/
  
  注:
  执行方式如(假设编译出的执行文件为getmac):
  ./getmac /dev/net0
  
  MDI(MAC Driver Interface)
  
  MACIOC_GETADDR
  向MDI driver发出请求从而获取网卡当前MAC地址 (the current MAC address);
  
  MACIOC_GETRADDR
  向MDI driver发出请求从而获取网卡厂商MAC地址(the factory MAC address);
  
  此程序适用于SCO OpenServer和UnixWare,在OpenServer 5.06上测试通过。
  
  我在尝试使用MACIOC_GETRADDR时提示无效参数,我估计也许是与驱动中没有提供相应的实现有关,因为我在偶然看到的注释版权信息为
  /*
  * Copyright (C) The Santa Cruz Operation, 1993-1995.
  * This Module contains Proprietary Information of
  * The Santa Cruz Operation and should be treated
  * as Confidential.
  */
  的AT-2500TX驱动源码中,相应部分只包含了MACIOC_GETADDR的实现,而没有MACIOC_GETRADDR。


相关文章


自定义临时表实现及在Oracle atial应用
在Oracle中使用自治事务保存日志表条目
相当方便快速消除行迁移的表的方法
Gaim1.21和OpenQ0.3.1的安装方法
在SCO下编程获取网卡MAC地址
Linux环境下的高级隐藏技术
脚本语言新用简易的PHP通讯簿
Java中引用,造型等问题解析
Tomcat连接池首次配置成功状态
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛