linux中获取本机ip和mac地址

来源:互联网 发布:好玩的网络捕鱼游戏 编辑:程序博客网 时间:2024/04/27 11:52
<pre name="code" class="cpp">
#include <sys/socket.h>#include <unistd.h>#include <sys/ioctl.h>#include <stdio.h>#include <arpa/inet.h>#include <net/if.h>#include <netinet/in.h>#include <string.h>#define   ETH_NAME   "eth0"int main(){       int   sock;       struct   sockaddr_in   sin;       struct   ifreq   ifr;       unsigned char arp[6] ;       sock   =   socket(AF_INET,   SOCK_DGRAM,   0);       if   (sock   ==   -1)       {            perror("socket");            return   -1;        }        strncpy(ifr.ifr_name,   ETH_NAME,   IFNAMSIZ);         ifr.ifr_name[IFNAMSIZ   -   1]   =   0;        if   (ioctl(sock,   SIOCGIFADDR,   &ifr)   ==  0)  //获取ip        {            memcpy(&sin,   &ifr.ifr_addr,   sizeof(sin));            fprintf(stdout,   "eth0:   %s\n",   inet_ntoa(sin.sin_addr));         }         if( ioctl( sock, SIOCGIFHWADDR, &ifr ) == 0 )   //获取mac         {             memcpy( arp, ifr.ifr_hwaddr.sa_data, 6 );             printf( "adapter hardware address %x:%x:%x:%x:%x:%x\n",                                    arp[0], arp[1], arp[2], arp[3], arp[4], arp[5] );          }                          return   0;}

ifreq结构头:

struct   ifreq   {        char         ifr_name[IFNAMSIZ];            union   {                struct     sockaddr   ifru_addr;                struct     sockaddr   ifru_dstaddr;                struct     sockaddr   ifru_broadaddr;                short      ifru_flags;                int        ifru_metric;                caddr_t    ifru_data;        }   ifr_ifru;}; 

编译命令为:

gcc ipget.c -o ipget



0 0
原创粉丝点击