linux 获取网卡mac地址命令行,LINUX下获取网卡IP地址和MAC地址,子网掩码程序参考...

阅读: 评论:0

linux 获取网卡mac地址命令行,LINUX下获取网卡IP地址和MAC地址,子网掩码程序参考...

linux 获取网卡mac地址命令行,LINUX下获取网卡IP地址和MAC地址,子网掩码程序参考...

#ifdef SOLARIS

#include #endif

#define MAXINTERFACES 16 /* 最大接口数 */

int main(int argc, char **argv)

{

register int fd, intrface, retn = 0;

struct ifreq buf[MAXINTERFACES]; /* ifreq结构数组 */

struct arpreq arp;

struct ifconf ifc;

if ((fd = socket (AF_INET, SOCK_DGRAM, 0)) >= 0)

{

ifc.ifc_len = sizeof buf;

ifc.ifc_buf = (caddr_t) buf;

if (!ioctl (fd, SIOCGIFCONF, (char *) &ifc))

{

//获取接口数量信息

intrface = ifc.ifc_len / sizeof (struct ifreq);

printf("interface num is intrface=%dn",intrface);

puts("");

//根据借口信息循环获取设备IP和MAC地址

while ( (intrface--) > 0)

{

//获取设备名称

printf ("net device %sn", buf[intrface].ifr_name);

//判断网卡类型

if (!(ioctl (fd, SIOCGIFFLAGS, (char *) &buf[intrface])))

{

if (buf[intrface].ifr_flags & IFF_PROMISC)

{

puts ("the interface is PROMISC");

retn++;

}

}

else

{

char str[256];

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);

perror (str);

}

//判断网卡状态

if (buf[intrface].ifr_flags & IFF_UP)

{

puts("the interface status is UP");

}

else

{

puts("the interface status is DOWN");

}

//获取当前网卡的IP地址

if (!(ioctl (fd, SIOCGIFADDR, (char *) &buf[intrface])))

{

printf("IP address is:");

puts((char *)inet_ntoa(((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr));

//printf("n%dn"buf[intrface].ifr_addr))->sin_addr.s_addr);

//puts (buf[intrface].ifr_addr.sa_data);

}

else

{

char str[256];

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);

perror (str);

}

/* this section can't get Hardware Address,I don't know whether the reason is module driver*/

#ifdef SOLARIS

//获取MAC地址

arp.arp_pa.sa_family = AF_INET;

arp.arp_ha.sa_family = AF_INET;

((struct sockaddr_in*)&arp.arp_pa)->sin_addr.s_addr=((struct sockaddr_in*)(&buf[intrface].ifr_addr))->sin_addr.s_addr;

if (!(ioctl (fd, SIOCGARP, (char *) &arp)))

{

printf("HW address is:");

//以十六进制显示MAC地址

printf("%02x:%02x:%02x:%02x:%02x:%02xn",

(unsigned char)arp.arp_ha.sa_data[0],

(unsigned char)arp.arp_ha.sa_data[1],

(unsigned char)arp.arp_ha.sa_data[2],

(unsigned char)arp.arp_ha.sa_data[3],

(unsigned char)arp.arp_ha.sa_data[4],

(unsigned char)arp.arp_ha.sa_data[5]);

puts("");

puts("");

}

#else

#if 0

/*Get HW ADDRESS of the net card */

if (!(ioctl (fd, SIOCGENADDR, (char *) &buf[intrface])))

{

printf("HW address is:");

printf("%02x:%02x:%02x:%02x:%02x:%02xn",

(unsigned char)buf[intrface].ifr_enaddr[0],

(unsigned char)buf[intrface].ifr_enaddr[1],

(unsigned char)buf[intrface].ifr_enaddr[2],

(unsigned char)buf[intrface].ifr_enaddr[3],

(unsigned char)buf[intrface].ifr_enaddr[4],

(unsigned char)buf[intrface].ifr_enaddr[5]);

puts("");

}

#endif

if (!(ioctl (fd, SIOCGIFHWADDR, (char *) &buf[intrface])))

{

printf("HW address is:");

printf("%02x:%02x:%02x:%02x:%02x:%02xn",

(unsigned char)buf[intrface].ifr_hwaddr.sa_data[0],

(unsigned char)buf[intrface].ifr_hwaddr.sa_data[1],

(unsigned char)buf[intrface].ifr_hwaddr.sa_data[2],

(unsigned char)buf[intrface].ifr_hwaddr.sa_data[3],

(unsigned char)buf[intrface].ifr_hwaddr.sa_data[4],

(unsigned char)buf[intrface].ifr_hwaddr.sa_data[5]);

}

#endif

else

{

char str[256];

sprintf (str, "cpm: ioctl device %s", buf[intrface].ifr_name);

perror (str);

}

//子网掩码

if (!(ioctl(fd, SIOCGIFNETMASK, (char *) &buf[intrface])))

{

printf("MASK:%s",

(char*)inet_ntoa(((struct sockaddr_in*) (&buf[intrface].ifr_addr))->sin_addr));

puts("");

}

else

{

char str[256];

sprintf(str, "SIOCGIFADDR ioctl %s", buf[intrface].ifr_name);

perror(str);

}

//广播地址

if (! (ioctl(fd, SIOCGIFBRDADDR, (char *) &buf[intrface])))

printf("Broadcast Address:%sn",

(char*)inet_ntoa(((struct sockaddr_in*) (&buf[intrface].ifr_addr))->sin_addr));

puts("");

puts("");

} //while

} else

perror ("cpm: ioctl");

} else

perror ("cpm: socket");

close (fd);

return retn;

}

/*

#include int ioctl(int fd, int request, … * void *arg *);

返回:成功返回0,失败返回-1

char *inet_ntoa (struct in_addr);

返回点分十进制的字符串在静态内存中的指针。

所在头文件:函数功能:将网络地址转换成“.”点隔的字符串格式。

所需库: winsock.h

#includestruct ifconf

{

intifc_len;/* size of buffer*

union

{

char __user *ifcu_buf;

struct ifreq __user *ifcu_req;

} ifc_ifcu;

};

struct ifreq

{

#define IFHWADDRLEN6

union

{

charifrn_name[IFNAMSIZ];* if name, e.g. "en0" *

} ifr_ifrn;

union {

structsockaddr ifru_addr;

structsockaddr ifru_dstaddr;

structsockaddr ifru_broadaddr;

structsockaddr ifru_netmask;

struct sockaddr ifru_hwaddr;

shortifru_flags;

intifru_ivalue;

intifru_mtu;

struct ifmap ifru_map;

charifru_slave[IFNAMSIZ];/* Just fits the size *

charifru_newname[IFNAMSIZ];

void __user *ifru_data;

structif_settings ifru_settings;

} ifr_ifru;

};

#define ifr_nameifr_ifrn.ifrn_name/* interface name *

#define ifr_hwaddrifr_ifru.ifru_hwaddr/* MAC address *

#defineifr_addrifr_ifru.ifru_addr/* address*

#defineifr_dstaddrifr_ifru.ifru_dstaddr/* other end of p-p lnk*

#defineifr_broadaddrifr_ifru.ifru_broadaddr/* broadcast address*

#defineifr_netmaskifr_ifru.ifru_netmask/* interface net mask*

#defineifr_flagsifr_ifru.ifru_flags/* flags*

#defineifr_metricifr_ifru.ifru_ivalue/* metric*

#defineifr_mtuifr_ifru.ifru_mtu/* mtu*

#define ifr_mapifr_ifru.ifru_map/* device map

#define ifr_slaveifr_ifru.ifru_slave/* slave device*

#defineifr_dataifr_ifru.ifru_data/* for use by interface*

#define ifr_ifindexifr_ifru.ifru_ivalue/* interface index

#define ifr_bandwidthifr_ifru.ifru_ivalue /* link bandwidth*

#define ifr_qlenifr_ifru.ifru_ivalue/* Queue length *

#define ifr_newnameifr_ifru.ifru_newname/* New name*

#define ifr_settingsifr_ifru.ifru_settings/* Device/proto settings*

*/

本文发布于:2024-02-04 12:03:11,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170706759355390.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:地址   网卡   命令行   子网掩码   程序
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23