zoukankan      html  css  js  c++  java
  • linux获得网卡信息

     1 #define MAX_INTERFACE         64
     2 
     3 int showifs()
     4 {
     5     int i;
     6     int rc;
     7     int sock;
     8     int ifnum;
     9     struct ifreq ifr[MAX_INTERFACE];
    10 //    struct arpreq arp;
    11     struct ifconf ifc;
    12 
    13     sock = socket ( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
    14     if ( sock == -1 )
    15     {
    16         return -1;
    17     }
    18 
    19     ifc.ifc_len = sizeof( ifr );
    20     ifc.ifc_buf = ( caddr_t ) ifr;
    21     rc = ioctl ( sock, SIOCGIFCONF, &ifc );
    22     if ( rc == -1 )
    23     {
    24         close( sock );
    25         return -1;
    26     }
    27 
    28     ifnum = ifc.ifc_len / sizeof ( struct ifreq );
    29     fprintf( stdout, "ifnum=[%d]
    ======================================
    ", ifnum );
    30     for ( i = 0; i < ifnum; i ++ )
    31     {
    32         fprintf( stdout, "ifname [%s]
    ", ifr[i].ifr_name );
    33 
    34         //status
    35         rc = ioctl( sock, SIOCGIFFLAGS, ifr + i );
    36         if ( rc != -1 )
    37         {
    38             if ( ifr[i].ifr_flags & IFF_PROMISC )
    39             {
    40                 fprintf( stdout, "PROMISC=TRUE
    " );
    41             }
    42             else
    43             {
    44                 fprintf( stdout, "PROMISC=FALSE
    " );
    45             }
    46 
    47 
    48             if ( ifr[i].ifr_flags & IFF_UP )
    49             {
    50                 fprintf( stdout, "UP=TRUE
    " );
    51             }
    52             else
    53             {
    54                 fprintf( stdout, "UP=FALSE
    " );
    55             }
    56         }
    57 
    58         //ip
    59         rc = ioctl ( sock, SIOCGIFADDR, ifr + i );
    60         if ( rc != -1 )
    61         {
    62             fprintf( stdout, "IP=%s
    ", inet_ntoa( ( ( struct sockaddr_in* )( &ifr[i].ifr_addr ) )->sin_addr ) );
    63         }
    64 
    65         //netmask
    66         rc = ioctl ( sock, SIOCGIFNETMASK, ifr + i );
    67         if ( rc != -1 )
    68         {
    69             fprintf( stdout, "NETMASK=%s
    ", inet_ntoa( ( ( struct sockaddr_in* )( &ifr[i].ifr_netmask  ) )->sin_addr ) );
    70         }
    71 
    72         //broadcast
    73         rc = ioctl ( sock, SIOCGIFBRDADDR, ifr + i );
    74         if ( rc != -1 )
    75         {
    76             fprintf( stdout, "BROADCAST=%s
    ", inet_ntoa( ( ( struct sockaddr_in* )( &ifr[i].ifr_broadaddr ) )->sin_addr ) );
    77         }
    78 
    79         //mac
    80         rc = ioctl ( sock, SIOCGIFHWADDR, ifr + i );
    81         if ( rc != -1 )
    82         {
    83             fprintf( stdout, "%02x:%02x:%02x:%02x:%02x:%02x
    ",
    84                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[0],
    85                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[1],
    86                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[2],
    87                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[3],
    88                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[4],
    89                      ( unsigned char )ifr[i].ifr_hwaddr.sa_data[5] );
    90         }
    91     }
    92 
    93     close( sock );
    94     return 0;
    95 }
  • 相关阅读:
    linux 安装 Chrome
    J2EE版本
    Java 源码解析之局部变量检查
    /etc/xinetd.conf 和 /etc/xinetd.d/*【新网络服务配置】
    Linux 内核编译
    linux 汇编
    /etc/ethers【地址映射】
    Linux LAMP 搭建
    Linux ftp 使用
    linux apache
  • 原文地址:https://www.cnblogs.com/javado/p/4628970.html
Copyright © 2011-2022 走看看