如何以编程方式编辑路由表

6
我正在编写一个运行在嵌入式平台上的守护进程,需要根据连接的接口动态更改设备的默认路由。有没有更直接的方式来实现而不是使用system("route del default && route add default gateway blah")等命令?更新:我通过发现pppd的补丁解决了我的特定问题,允许replacedefaultroute选项。该补丁还包括编程修改路由表的代码。它已被包含在这个gentoo bug报告中:http://bugs.gentoo.org/227321
3个回答

7

请查看SIOCADDRT/SIOCDELRT ioctls(建议参考Stevens的“Unix网络编程”)。


1
太棒了,我要么获得shell级别访问权限,要么必须解析/proc/net/route并使用ioctls!我想我可以从其他项目中拿一些代码。我目前正在研究pppd如何实现的。 - Matthew Smith

1

我打了

man route

因为我知道有时候在“参见”部分可以找到如何以编程方式完成相同操作的提示。我看到第4页上有一个关于“route”的手册(“route(4)”在“参见”部分中)。所以我尝试了一下。

man 4 route

看起来很有前途,可以通过编程实现路由命令的功能。

注意我刚刚注意到这只适用于BSD系统。这里有一个manpage的链接http://www.manpagez.com/man/4/route/。这可能有帮助,也可能没有。也许你可以在这里搜索一些东西,并添加“linux”一词。


我有man route但没有man 4 route。你能告诉我需要哪个库或头文件吗? - Matthew Smith
你说得对,是我的错。我正在一个BSD系统上检查。你的man route有一个“see also”看起来很有希望吗? - Doug T.
似乎在Linux上,您必须使用ioctls并解析/proc中的路由表,这很方便。 - Matthew Smith

0
我建议只使用那个路由命令。那就是它存在的目的,其他任何方法都只是一种hack。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接