首页 电脑 电脑学堂 查看内容

如何获取本机ip和网卡mac等信息

2009-8-29 10:34 835 0

摘要: 如何获取本机ip和网卡mac等信息solaris上编译方式是: gcc getip.c -DSOLARIS -lsocket -lnsl     linux直接用 &...
关键词: nbsp HWND 窗口 LPARAM WPARAM return dwWndProcessID dwQQProcessID 对话框 PostMessage

如何获取本机ip和网卡mac等信息solaris上编译方式是: gcc getip.c -DSOLARIS -lsocket -lnsl     linux直接用     gcc getip.c 代码如下:     #include <stdio.h>    #include <sys/types.h>    #include <sys/param.h>    #include <sys/ioctl.h>    #include <sys/socket.h>    #include <net/if.h>    #include <netinet/in.h>    #include <net/if_arp.h>    #ifdef SOLARIS    #include <sys/sockio.h>    #endif    #define MAXINTERFACES   16    main (argc, argv)    register int argc;    register char *argv[];    {    register int fd, intrface, retn = 0;    struct ifreq buf[MAXINTERFACES];    struct arpreq arp;    struct ifconf ifc;    if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0) {    ifc.ifc_len = sizeof buf;    ifc.ifc_buf = (caddr_t) buf;    if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc)) {    intrface = ifc.ifc_len / sizeof (struct ifreq);    printf("interface num is intrface=%d\n\n\n",intrface);    while (intrface-- > 0)    {    printf ("net device %s\n", buf[intrface].ifr_name);    /*Jugde whether the net card status is promisc  */    if (!(ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface]))) {    if (buf[intrface].ifr_flags & IFF_PROMISC) {    puts ("the interface is PROMISC");    retn++;    }    } else {    char str[256];    sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);    perror (str);    }    /*Jugde whether the net card status is up       */    if (buf[intrface].ifr_flags & IFF_UP) {    puts("the interface status is UP");    }    else {    puts("the interface status is DOWN");    }    /*Get IP of the net card */    if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface])))    {    puts ("IP address is:");    puts(inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));    puts("");    //puts (buf[intrface].ifr_addr.sa_data);    }    else {    char str[256];    sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);    perror (str);    }    /* this section can't get Hardware Address,I don't know whether the reason is module driver*/    //          ((struct sockaddr_in*)&arp.arp_pa)->sin_addr=((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr;    #ifdef SOLARIS    arp.arp_pa.sa_family = AF_INET;    arp.arp_ha.sa_family = AF_INET;    ((struct sockaddr_in*)&arp.arp_pa)->sin_addr.s_addr=((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr.s_addr;    if (!(ioctl (fd, SIOCGARP, (char *) &arp)))    {    puts ("HW address is:");    printf("%02x:%02x:%02x:%02x:%02x:%02x\n",    (unsigned char)arp.arp_ha.sa_data[0],    (unsigned char)arp.arp_ha.sa_data[1],    (unsigned char)arp.arp_ha.sa_data[2],    (unsigned char)arp.arp_ha.sa_data[3],    (unsigned char)arp.arp_ha.sa_data[4],    (unsigned char)arp.arp_ha.sa_data[5]);    puts("");    puts("");    }    #else    #if 0    /*Get HW ADDRESS of the net card */    if (!(ioctl (fd,  SIOCGENADDR, (char *) &buf[intrface])))    {    puts ("HW address is:");    printf("%02x:%02x:%02x:%02x:%02x:%02x\n",    (unsigned char)buf[intrface].ifr_enaddr[0],    (unsigned char)buf[intrface].ifr_enaddr[1],    (unsigned char)buf[intrface].ifr_enaddr[2],    (unsigned char)buf[intrface].ifr_enaddr[3],    (unsigned char)buf[intrface].ifr_enaddr[4],    (unsigned char)buf[intrface].ifr_enaddr[5]);    puts("");    puts("");    }    #endif    if (!(ioctl (fd, SIOCGIFHWADDR, (char *) &buf[intrface])))    {    puts ("HW address is:");    printf("%02x:%02x:%02x:%02x:%02x:%02x\n",    (unsigned char)buf[intrface].ifr_hwaddr.sa_data[0],    (unsigned char)buf[intrface].ifr_hwaddr.sa_data[1],    (unsigned char)buf[intrface].ifr_hwaddr.sa_data[2],    (unsigned char)buf[intrface].ifr_hwaddr.sa_data[3],    (unsigned char)buf[intrface].ifr_hwaddr.sa_data[4],    (unsigned char)buf[intrface].ifr_hwaddr.sa_data[5]);    puts("");    puts("");    }    #endif    else {    char str[256];    sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);    perror (str);    }    }    } else    perror ("cpm: ioctl");    } else    perror ("cpm: socket");    close (fd);    return retn;    }   
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部