roykingz 发表于 2015-03-16 09:58

请问在Linux内核3.2中获取本机网卡信息和网关IP的函数是什么?

如题,最好能介绍这些内核函数的用法,或者给一个函数介绍的链接,内核版本是3.2.0

垂天大星江南凤 发表于 2015-05-25 18:16

你百度linux编程获取本机IP地址
网关目前我知道的使用ioctl

nswcfd 发表于 2015-05-26 15:58

在内核里“网关”是怎么定义的?默认路由的下一跳?但是有可能有多个默认路由存在。
在多网卡的机器上,“本机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]
查看完整版本: 请问在Linux内核3.2中获取本机网卡信息和网关IP的函数是什么?