免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2102 | 回复: 2
打印 上一主题 下一主题

[内核入门] 请问在Linux内核3.2中获取本机网卡信息和网关IP的函数是什么? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-16 09:58 |只看该作者 |倒序浏览
如题,最好能介绍这些内核函数的用法,或者给一个函数介绍的链接,内核版本是3.2.0

论坛徽章:
0
2 [报告]
发表于 2015-05-25 18:16 |只看该作者
你百度  linux编程获取本机IP地址
网关目前我知道的使用ioctl

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
3 [报告]
发表于 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,第一个默认路由的下一跳就是网关。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP