发信人: xgh() 
整理人: wenbobo(2002-12-27 15:54:18), 站内信件
 | 
 
 
#include <netdb.h> #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <sys/utsname.h> #include <sys/ioctl.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <net/if.h> #include <net/if_arp.h>
  #define ETH_ALEN 14
  int main(int argc, char **argv) {         char            *pptr, nowaddr[8];         unsigned char   ptr[ETH_ALEN];         struct hostent  *hptr;         struct sockaddr_in sin, nowsin;         struct ifreq  nowif;         int    nowsock;         struct utsname  nownode;         struct sockaddr nowsckaddr;
          uname(&nownode);         hptr = gethostbyname(nownode.nodename);
          bzero(&sin, sizeof(sin));         sin.sin_family = hptr->h_addrtype;         memcpy(&sin.sin_addr, hptr->h_addr, hptr->h_length);         pptr = inet_ntoa(sin.sin_addr);         printf("%s\n", pptr);
          nowsock = socket(AF_INET, SOCK_DGRAM, 0); //      memcpy(&nowif.arp_pa, &sin.sin_addr, sizeof(sin.sin_addr));         bcopy("eth1", nowif.ifr_name, IFNAMSIZ);         printf("the interface is %s\n", nowif.ifr_name);         if(ioctl(nowsock, SIOCGIFHWADDR, &nowif) < 0) {                 printf("ioctl error!!\n");                 exit (-1);         }         nowsckaddr = (struct sockaddr)nowif.ifr_hwaddr;         bcopy(&nowsckaddr.sa_data, ptr, ETH_ALEN);
          printf("%d,%d,%d,%d,%d,%d\n", *ptr, *(ptr+1), *(ptr+2), *(ptr+3),                                         *(ptr+4), *(ptr+5));         printf("%02X:%02X:%02X:%02X:%02X:%02X\n", *ptr, *(ptr+1), *(ptr+2), *(ptr+3),                                         *(ptr+4), *(ptr+5));         sprintf(nowaddr, "%02X", *(ptr+2));         sprintf(nowaddr+2, "%02X", *(ptr+3));         sprintf(nowaddr+4, "%02X", *(ptr+4));         sprintf(nowaddr+6, "%02X", *(ptr+5));         printf("%s\n", nowaddr);         close(nowsock);
  }
  -- ※ 来源:.网易 BBS bbs.netease.com.[FROM: bbs.szptt.net.cn]
  | 
 
 
 |