linux下获取指定网络的ip地址与netmask的接口:
int get_ip(char* ipaddr,char *netmask, const char *ethname )
{
int ret=-1;
if ( ipaddr && netmask && ethname )
{
int fd, intrface;
struct ifreq buf[16];
struct ifconf ifc;
if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) < 0)
return -1;
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
if (ioctl (fd, SIOCGIFCONF, (char *) &ifc) < 0)
goto _error_;
intrface = ifc.ifc_len/sizeof(struct ifreq);
while(intrface-->0)
{
if (strstr(buf[intrface].ifr_name, ethname))
{
if ((ioctl (fd, SIOCGIFADDR, (char*)&buf[intrface])) < 0)
goto _error_;
sprintf(ipaddr, "%s",
inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));
if ((ioctl (fd, SIOCGIFNETMASK , (char*)&buf[intrface])) < 0)
goto _error_;
sprintf(netmask, "%s",
inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_netmask))->sin_addr));
ret = 0;
}
}
_error_:
close(fd);
}
return ret;
}
获取mac地址的接口:
int get_mac(char *mac)
{
int fd, ret=-1;
if ( mac )
{
struct ifreq ifr;
if( (fd = socket(AF_INET, SOCK_DGRAM, 0) )<0)
{
perror("socket");
return -1;
}
ifr.ifr_addr.sa_family = AF_INET;
strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1);
if(ioctl(fd, SIOCGIFHWADDR, &ifr) == 0)
{
sprintf(mac, "%02x-%02x-%02x-%02x-%02x-%02x",
(unsigned char)ifr.ifr_hwaddr.sa_data[0],
(unsigned char)ifr.ifr_hwaddr.sa_data[1],
(unsigned char)ifr.ifr_hwaddr.sa_data[2],
(unsigned char)ifr.ifr_hwaddr.sa_data[3],
(unsigned char)ifr.ifr_hwaddr.sa_data[4],
(unsigned char)ifr.ifr_hwaddr.sa_data[5]);
strupr(mac);
ret = 0;
}
close(fd);
}
return ret;
}