我想编写一个模块在内核中查找路由表以获取网关ip,并使用ip查找arp缓存以获取网关的mac地址。如何编写内核模块在内核中查找路由表和arp缓存?
0
A
回答
1
不知道你为什么需要一个内核模块。你需要找到默认网关的MAC地址是用户可用空间的一切......
#!/usr/bin/env python
import re
import socket
from struct import pack
hex_gateway = re.findall('\t00000000\t([0-9A-F]*)\t', open('/proc/net/route').read())[0]
if not hex_gateway: sys.exit(1)
gw_ip = socket.inet_ntoa(pack('I', int(hex_gateway, 16)))
gw_mac = False
for line in open('/proc/net/arp').readlines():
if line.startswith(gw_ip):
gw_mac = line.split()[3]
break
if gw_mac:print gw_mac
else:sys.exit(1)
1
fib_lookup
:查找路由表。定义在net/ipv4/route.c
。
ipv4_neigh_lookup
:使用struct neighbor(ARP协议由邻居子系统实现)发送SKB。
有关路由表和邻居子系统的更多详细信息,请参阅ip_route_input_slow
。
相关问题
- 1. 在内核模块中查找目录
- 2. 为我的路由器的内核版本编译特定内核模块
- 3. 如何在内核模块中查找物理和逻辑核心号?
- 4. 内核 - 查找写入的块号
- 5. Linux内核模块编程
- 6. !编译内核模块
- 7. Linux内核模块编译
- 8. Android内核模块编程
- 9. Linux内核模块编译
- 10. 内核模块
- 11. 如何在内核模块中打印linux内核版本号
- 12. 如何编译Linux内核模块
- 13. 点击模块化路由器的内核编译
- 14. 使用内核模块进行内存写入导致Android内核中出现内核oops
- 15. Android和内核模块
- 16. 如何检索asp.net内核中的内存缓存键列表?
- 17. 内核模块/ proc
- 18. 内核模块addr2line
- 19. Openwrt内核模块
- 20. 如何在安装新内核时自动执行linux内核模块编译?
- 21. 在Linux内核模块中刷新CPU数据缓存
- 22. 使用gcc与内核头文件编译Linux内核模块
- 23. 其他内核的Linux内核模块开发编译
- 24. 如何为我自己编写的内核模块禁用rmmod?
- 25. 内核中的GMP模块
- 26. Linux /内核:如何选择Videobuf2框架作为内核模块?
- 27. 如何在Linux内核模块
- 28. 如何找到已编译的内核模块的版本?
- 29. C - 从内核模块写入物理内存
- 30. 启动时内核模块在Linux内核中的状态
为什么你需要一个模块?你不能使用iptables? – 2012-03-07 06:45:52
你的问题是什么?和[你有什么尝试](http://mattgemmell.com/2008/12/08/what-have-you-tried/)? – 2012-03-07 07:08:30
我想编写一个程序并将它编译为.ko,而我使用insmod来加载这个模块时,它会激活网关的地址。所以我应该在内核中查找路由表,但我不知道该怎么做。 – gotounix 2012-03-07 12:11:19