ioctl()获取本地网卡设备信息
2023-09-27 14:29:31 时间
g_ipaddr = sin.sin_addr.s_addr;
printf("local eth0:\t%s\n", inet_ntoa(sin.sin_addr));
//获取并打印广播地址
if(ioctl(sock, SIOCGIFBRDADDR, ifr) 0)
perror("ioctl error\n");
memcpy( sin, ifr.ifr_addr, sizeof(sin));
g_broadcast_ipaddr = sin.sin_addr.s_addr;
printf("broadcast:\t%s\n", inet_ntoa(sin.sin_addr));
//获取并打印子网掩码
if(ioctl(sock,SIOCGIFNETMASK, ifr) 0)
perror("ioctl error\n");
memcpy( sin, ifr.ifr_addr, sizeof(sin));
g_subnetmask = sin.sin_addr.s_addr;
printf("subnetmask:\t%s\n", inet_ntoa(sin.sin_addr));
close(sock);
ioctl(sockfd, SIOCGIFCONF, ifconf); //获取所有接口信息 //接下来一个一个的获取IP地址 ifreq = (struct ifreq*)buf; for (i=(ifconf.ifc_len/sizeof (struct ifreq)); i i--) { if(ifreq- ifr_flags == AF_INET) { printf("name = [%s] " , ifreq- ifr_name); printf("local addr = [%s]", inet_ntoa(((struct sockaddr_in*) (ifreq- ifr_addr))- sin_addr)); printf(); ifreq++; } } return 0;
/* 得到本机的mac地址和ip地址 */ int GetLocalMac ( const char *device,char *mac,char *ip ) int sockfd; struct ifreq req; struct sockaddr_in * sin;
fprintf ( stderr,"Sock Error:%s\n\a",strerror ( errno ) ); return ( -1 ); }
strcpy ( req.ifr_name,device ); if ( ioctl ( sockfd,SIOCGIFHWADDR, ( char * ) req ) ==-1 ) { fprintf ( stderr,"ioctl SIOCGIFHWADDR:%s\n\a",strerror ( errno ) ); close ( sockfd ); return ( -1 ); } memcpy ( mac,req.ifr_hwaddr.sa_data,6 );
req.ifr_addr.sa_family = PF_INET; if ( ioctl ( sockfd,SIOCGIFADDR, ( char * ) req ) ==-1 ) { fprintf ( stderr,"ioctl SIOCGIFADDR:%s\n\a",strerror ( errno ) ); close ( sockfd ); return ( -1 ); } sin = ( struct sockaddr_in * ) req.ifr_addr; memcpy ( ip, ( char * ) sin- sin_addr,4 );
ioctl(sockfd, SIOCGIFCONF, ifconf); //获取所有接口信息 //接下来一个一个的获取IP地址 ifreq = (struct ifreq*)buf; for (i=(ifconf.ifc_len/sizeof (struct ifreq)); i i--) { if(ifreq- ifr_flags == AF_INET) { printf("name = [%s] " , ifreq- ifr_name); printf("local addr = [%s]", inet_ntoa(((struct sockaddr_in*) (ifreq- ifr_addr))- sin_addr)); printf(); ifreq++; } } return 0;
/* 得到本机的mac地址和ip地址 */ int GetLocalMac ( const char *device,char *mac,char *ip ) int sockfd; struct ifreq req; struct sockaddr_in * sin;
fprintf ( stderr,"Sock Error:%s\n\a",strerror ( errno ) ); return ( -1 ); }
strcpy ( req.ifr_name,device ); if ( ioctl ( sockfd,SIOCGIFHWADDR, ( char * ) req ) ==-1 ) { fprintf ( stderr,"ioctl SIOCGIFHWADDR:%s\n\a",strerror ( errno ) ); close ( sockfd ); return ( -1 ); } memcpy ( mac,req.ifr_hwaddr.sa_data,6 );
req.ifr_addr.sa_family = PF_INET; if ( ioctl ( sockfd,SIOCGIFADDR, ( char * ) req ) ==-1 ) { fprintf ( stderr,"ioctl SIOCGIFADDR:%s\n\a",strerror ( errno ) ); close ( sockfd ); return ( -1 ); } sin = ( struct sockaddr_in * ) req.ifr_addr; memcpy ( ip, ( char * ) sin- sin_addr,4 );
相关文章
- iOS获取设备型号
- Airtest如何自动连接重启后的设备并继续执行自动化脚本呢?
- 使用Spacedesk实现扩展主机屏幕到联网设备
- 一款蓝牙音频无线传输设备上拆下的光电管
- 《渐进增强——跨平台用户体验设计》一1.6 适应未知的设备
- linux 分配和释放设备编号
- 苹果 AR 眼镜设备揭示了为什么,它们将成为游戏规则的改变者
- 《可穿戴创意设计:技术与时尚的融合》一一第1章 可穿戴设备简史
- 原生js监听判断设备是否有网络,断网监听(兼容苹果)
- 专家:未来更应注重“勒索软件”对其它重要物联网设备威胁
- Unity Android 之 获取系统语言(手机设备设置的系统语言)的二种方式(中文区分简体、繁体、日文)
- 【Android】使用BluetoothSocket实现跨设备通讯
- 17绘图设备
- 黑客可用一个URL劫持Ubiquiti无线网络设备
- 蓝牙 - 设备名称