微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在linux中使用ioctl获取网关ip和nameserver ip

我有使用ioctl呼叫的IP,子网和广播地址。 但不知道如何获得认网关和名称服务器IP。 如果我从/etc/resolv.confselect名称服务器,那么它是可靠的吗?

这是我的代码

int main(void) { char buf[1024]; struct ifconf ifc; struct ifreq *ifr; int sck,nInterfaces; int i; unsigned char mac[6]; sck = socket(AF_INET,SOCK_DGRAM,0); if(sck < 0) { perror("socket"); return 1; } ifc.ifc_len = sizeof(buf); ifc.ifc_buf = buf; if(ioctl(sck,SIocgIFCONF,&ifc) < 0) { perror("ioctl(SIocgIFCONF)"); return 1; } ifr = ifc.ifc_req; nInterfaces = ifc.ifc_len / sizeof(struct ifreq); for(i = 0; i < nInterfaces; i++) { struct ifreq *item = &ifr[i]; printf("Interface Name = %snIP = %sn",item->ifr_name,inet_ntoa(((struct sockaddr_in *)&item->ifr_addr)->sin_addr)); ioctl(sck,SIocgIFNETMASK,item); printf("subnet Mask = %sn",inet_ntoa(((struct sockaddr_in *)&item->ifr_netmask)->sin_addr)); ioctl(sck,SIocgIFBRDADDR,item); printf("broadCat Address = %sn",inet_ntoa(((struct sockaddr_in *)&item->ifr_broadaddr)->sin_addr)); ioctl(sck,SIocgIFHWADDR,item); memcpy(mac,item->ifr_hwaddr.sa_data,6); printf("MAC:%02X:%02X:%02X:%02X:%02X:%02Xn",mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]); } return 0; }

如何在Linux上编译Windows Visual C ++代码

在linux下使用dlopen()api时,我可以在_init()函数添加参数吗?

Unix – 保护你自己的内存消耗失控打破个人电脑?

计算机重新启动后,registry项不会持久

O_ASYNC停止产生SIGIO

从任何types的文件获取文本

TCP,尽pipeKEEPALIVE挂起recv函数

libcurl和libsoup之间的区别

运行一个连续的Windows后台任务,不吃内存

Qt布局和分离器的差异

要获得认网关,您可以解析/proc/net/route :

# cat /proc/net/route Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT eth0 00000000 010110AC 0003 0 0 0 000000000 0 0

如果你需要名称服务器地址,解析/etc/resolv.conf似乎是一个可靠的选项给我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐