zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

ioctl()获取本地网卡设备信息

设备网卡 获取 信息 本地 ioctl
2023-09-27 14:29:31 时间
    g_ipaddr = sin.sin_addr.s_addr;     printf("local eth0:\t%s\n", inet_ntoa(sin.sin_addr));     //获取并打印广播地址     if(ioctl(sock, SIOCGIFBRDADDR,  ifr) 0)         perror("ioctl error\n");     memcpy( sin,  ifr.ifr_addr, sizeof(sin));     g_broadcast_ipaddr = sin.sin_addr.s_addr;     printf("broadcast:\t%s\n", inet_ntoa(sin.sin_addr));     //获取并打印子网掩码     if(ioctl(sock,SIOCGIFNETMASK, ifr) 0)         perror("ioctl error\n");     memcpy( sin,  ifr.ifr_addr, sizeof(sin));     g_subnetmask = sin.sin_addr.s_addr;     printf("subnetmask:\t%s\n", inet_ntoa(sin.sin_addr));     close(sock); 
    ioctl(sockfd, SIOCGIFCONF,  ifconf); //获取所有接口信息     //接下来一个一个的获取IP地址     ifreq = (struct ifreq*)buf;     for (i=(ifconf.ifc_len/sizeof (struct ifreq)); i  i--)     {         if(ifreq- ifr_flags == AF_INET)         {             printf("name = [%s] " , ifreq- ifr_name);             printf("local addr = [%s]",                 inet_ntoa(((struct sockaddr_in*) (ifreq- ifr_addr))- sin_addr));             printf();         ifreq++;         }     }     return 0;
/* 得到本机的mac地址和ip地址 */ int GetLocalMac ( const char *device,char *mac,char *ip )     int sockfd;     struct ifreq req;     struct sockaddr_in * sin;
        fprintf ( stderr,"Sock Error:%s\n\a",strerror ( errno ) );         return ( -1 );     }
    strcpy ( req.ifr_name,device );     if ( ioctl ( sockfd,SIOCGIFHWADDR, ( char * )  req ) ==-1 )     {         fprintf ( stderr,"ioctl SIOCGIFHWADDR:%s\n\a",strerror ( errno ) );         close ( sockfd );         return ( -1 );     }     memcpy ( mac,req.ifr_hwaddr.sa_data,6 );
    req.ifr_addr.sa_family = PF_INET;     if ( ioctl ( sockfd,SIOCGIFADDR, ( char * )  req ) ==-1 )     {         fprintf ( stderr,"ioctl SIOCGIFADDR:%s\n\a",strerror ( errno ) );         close ( sockfd );         return ( -1 );     }     sin = ( struct sockaddr_in * )  req.ifr_addr;     memcpy ( ip, ( char * )  sin- sin_addr,4 );