发信人: kevintz()
整理人: kevintz(2000-10-25 16:13:48), 站内信件
|
【 在 tinyworm (小虫子) 的大作中提到: 】
UNIX下怎样获取网卡的MAC地址
这是我写的程序,在Linux下编译通过,大家拿去参考吧。另外也可以参考
R. Stevens 《Unix Networking Programming》volume 1.
/**************************************************************
getha.c
kevintz 2000.9.6
*************************************************************/
#include <net/if.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
struct ifreq ifr;
int fd;
char* pa;
char* pa1;
int c;
int i;
if( argc != 2 ) {
fprintf(stderr, "usage:%s interfacename\n", argv[0]);
exit(1);
}
bzero(&ifr, sizeof(ifr));
strncpy(ifr.ifr_name, argv[1],16);
fd=socket(PF_INET, SOCK_DGRAM,0 );
if( fd < 0) {
perror("socket()");
exit(1);
}
if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
perror("ioctl() get hardware address error:");
exit(1);
} else {
pa1=pa=(char*) &ifr.ifr_hwaddr.sa_data;
printf("Interface:%s Hardware Address:\n", ifr.ifr_nam e);
for(i=0; i<5; i++) {
c=*pa;
c&=0x000000ff;
printf("%02x",c);
printf(":");
pa++;
}
c=*pa;
c&=0x000000ff;
printf("%02x",c);
printf("\n");
pa=pa1;
for(i=0; i<5; i++) {
c=*pa;
printf("%02x",c);
printf(":");
pa++;
}
c=*pa;
printf("%02x",c);
printf("\n");
}
exit(0);
}
例子:getha eth0
程序中第一种打印形式和ifconfig命令的一样,但原来的数据就不一样,不过我 认为
是printf和数据类型的差异。大家可以探讨一下这个奇怪问题。
-- If you understand unix, you understand the world.
If you understand NT, you JUST understand NT.
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.140.71.100]
|
|