Chinaunix首页 | 论坛 | 博客
  • 博客访问: 80043
  • 博文数量: 15
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 204
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-30 11:18
个人简介

一个奋斗在北京的东北人,一直在打杂,从未被超越!

文章存档

2021年(1)

2013年(11)

2012年(3)

我的朋友

分类: LINUX

2013-08-01 17:06:34

一、获取网络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"  
 

 

阅读(1229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~