首页
登录 | 注册

Linux编程之——获取网络IP地址、子网掩码和网卡MAC地址

一、获取网络IP地址
 
  1. char* FIT_GetIpAddr(char* eth)
  2. {
  3.     int fd = 0;
  4.     int iLen = 0;
  5.     
  6.     int i = 0;
  7.     struct ifreq ifr;
  8.     struct ifreq inter;

  9.     if(NULL == eth)
  10.     {
  11.         return FIT_NULL_IPADDR;
  12.     }
  13.     
  14.     memset( &inter, 0, sizeof(inter) );
  15.     iLen = strlen(eth);

  16.     fd = socket( PF_INET, SOCK_DGRAM, 0 );
  17.     if( -1 == fd )
  18.     {
  19.         return FIT_NULL_IPADDR;
  20.     }
  21.     
  22.     memcpy( inter.ifr_name, eth, iLen );
  23.     if (setsockopt( fd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&inter, sizeof(inter)) < 0)
  24.     {
  25.         close(fd);
  26.         return FIT_NULL_IPADDR;
  27.     }

  28.     memset( &ifr,0,sizeof(ifr) );
  29.     memcpy( ifr.ifr_name, eth, iLen );

  30.     if( ioctl(fd, SIOCGIFADDR, &ifr) < 0 )
  31.     {
  32.         close( fd );
  33.         return FIT_NULL_IPADDR;
  34.     }

  35.     if (((ifr.ifr_flags) & IFF_UP) && ((ifr.ifr_flags) & IFF_RUNNING))
  36.     {
  37.         close( fd);
  38.         return inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr);
  39.     }

  40.     close( fd );
  41.     return FIT_NULL_IPADDR;
  42. }
二、获取子网掩码

  1. char* FIT_GetMask(char* eth)
  2. {
  3.     int fd = 0;
  4.     int iLen = 0;
  5.     
  6.     int i = 0;
  7.     struct ifreq ifr;
  8.     struct ifreq inter;

  9.     if (NULL == eth)
  10.     {
  11.         return FIT_NULL_IPADDR;
  12.     }

  13.     memset( &inter, 0, sizeof(inter) );
  14.     iLen = strlen(eth);

  15.     fd = socket( PF_INET, SOCK_DGRAM, 0 );
  16.     if( -1 == fd )
  17.     {
  18.         return FIT_NULL_IPADDR;
  19.     }
  20.     
  21.     memcpy( inter.ifr_name, eth, iLen );
  22.     if (setsockopt( fd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&inter, sizeof(inter)) < 0)
  23.     {
  24.         close(fd);
  25.         return FIT_NULL_IPADDR;
  26.     }

  27.     memset( &ifr,0,sizeof(ifr) );
  28.     memcpy( ifr.ifr_name, eth, iLen );

  29.     if( ioctl(fd, SIOCGIFNETMASK, &ifr) < 0 )
  30.     {
  31.         close( fd );
  32.         return FIT_NULL_IPADDR;
  33.     }

  34.     close( fd);

  35.     return inet_ntoa(((struct sockaddr_in*)&(ifr.ifr_addr))->sin_addr);
  36. }
三、获取网卡MAC

  1. char *FIT_GetMac( const char *eth )
  2. {
  3.     int fd = -1;
  4.     int len = 0;
  5.     
  6.     struct ifreq ifr;
  7.     struct ifreq ifc;

  8.     if(NULL == eth) {
  9.         return FIT_NULL_MACADDR;
  10.     }

  11.     memset(&ifc, 0, sizeof(ifc));
  12.     len = strlen(eth);

  13.     fd = socket( PF_INET, SOCK_DGRAM, 0 );
  14.     if( -1 == fd ) {
  15.         return FIT_NULL_MACADDR;
  16.     }

  17.     memcpy( ifc.ifr_name, eth, len );
  18.     if(setsockopt( fd, SOL_SOCKET, SO_BINDTODEVICE, (char *)&ifc, sizeof(ifc)) < 0 ) {
  19.         close( fd );
  20.         return FIT_NULL_MACADDR;
  21.     }
  22.     
  23.     memset( &ifr, 0, sizeof(ifr) );
  24.     memcpy( ifr.ifr_name, eth, len );

  25.     if( ioctl( fd, SIOCGIFHWADDR, &ifr) < 0 ) {
  26.         close( fd );
  27.         return FIT_NULL_MACADDR;
  28.     }

  29.     close( fd );

  30.     return ether_ntoa(ifr.ifr_hwaddr.sa_data);
  31. }
说明:
        1、#define     FIT_NULL_IPADDR       "0.0.0.0"
        2、#define     FIT_NULL_MACADDR    "0:0:0:0:0:0"  
 

 


相关文章

  • wsock.open() = 使用wsock库以前必须调用此函数注册 wsock.close() = 使用wsock库以后必须调用此函数释放\n与wsock.open()配对使用 wsock.accept(__/*套接字句柄*/) = 创建 ...
  • wsock.tcp.client = TCP客户端支持库 wsock.tcp.client(.(缓冲区大小) = 创建TCP客户端,\n缓冲区大小为可选参数,默认为1KB ?.tcp.client = !tcp_client. tcp_cl ...
  • ipheader.strProtocol =  IP协议  ;  ipheader.strSourceIP = 源IP ;  ipheader.strDestIP = 目标IP ; tcpheader.strSport = 源端口 tcph ...
  • ipcalc此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.  .语法   .选项列表 说明 检测ip地址 指定ipv4 指定ipv6 显示指定ip的广播地址和网络掩码 显示指 ...
  • C#安全编程之控制台输出的陷阱
    底层库中将大量的数据通过Console.WriteLine写入控制台,将耗费大时的时间,导致上面界面一直在等待. 这是典型的C#的控制台输入陷阱,故控制台不宜输出大量的数据.
  • 通过vmware网络安装 solaris 10/u9 到 v210上过程如下:, 1 在笔记本电脑上安装Vmware 虚拟机软件: 2 安装一台运行solaris 10 x86 的虚拟机. 注意点:虚拟机的网络口设成bridge 模式, S ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.014 s.
京ICP备10005923号