请问在Linux内核3.2中获取本机网卡信息和网关IP的函数是什么?
如题,最好能介绍这些内核函数的用法,或者给一个函数介绍的链接,内核版本是3.2.0 你百度linux编程获取本机IP地址网关目前我知道的使用ioctl 在内核里“网关”是怎么定义的?默认路由的下一跳?但是有可能有多个默认路由存在。
在多网卡的机器上,“本机IP”又是怎么定义的?所有的deivce(物理的或者虚拟的)都有可能有IP,甚至是多个IP,哪个才是“本机IP”?
内核的API,只能告诉user space app设备上有哪些device,每个device上有哪些IP。有哪些路由条目,其下一跳又是多少等等。
具体的接口,可以参考ifconfig/route/iproute2的实现。
* ifconfig老版本的使用ioctl(SIOCGIFCONF/SIOCGIFNAME/SIOCGIFADDR),参考man 7 netdevice,新版本使用了rtnetlink
* route的实现好像是直接读/proc/net/route,然后做文本解析。
* 万能的iproute2::ip,直接使用rtnetlink。
以上都可以用strace跟踪验证一下。
当然,针对最常见的情况(只有一个网卡的PC),可以在内核API的基础上封装一个简单的接口,比如就定义第一个非lo的接口的第一个IP就是本机IP,第一个默认路由的下一跳就是网关。
页:
[1]