有没有可用的C库包含ifconfig的API?

时间:2011-05-18 18:47:58

标签: c linux network-programming

我想设置MTU或获取一些设备详细信息,但我不想使用 system(“ifconfig ...”)。

有没有办法在C中做到这一点?有些像libifconfig.so?

可以找到MTU的源代码here

但我现在真的没有太多时间。如何获取所有可用接口的名称(我的系统中有足够的接口)

4 个答案:

答案 0 :(得分:4)

可以使用ioctl完成。见netdevice(7)。我猜你正在寻找SIOCGIFMTUSIOCSIFMTU。我不知道它是否是标准的,如果你需要支持其他Unix,请更新你的问题。

修改

获取机器上的接口(未经测试):

int sock;
struct ifconf *conf;

sock = socket(AF_INET, SOCK_STREAM, 0);
ioctl(sock, SIOCGIFCONF , (char*) conf);

不要马虎,不要忘记检查返回值。我不在这里检查,因为我不在乎;你可能会这样做。

答案 1 :(得分:2)

当然有办法在C中做。请问自己写了ifconfig是什么?

由于Linux是开源的,您可以下载ifconfig的源代码并查看它使用的API。在我看来,这是最简单的方法。

如果我想亲自查看代码,我可能稍后编辑它以包含API。

答案 2 :(得分:1)

if_nameindex是获取所有接口列表的函数。

实际上对它们做很多事情依赖于系统特定的ioctl调用。

老实说,您最好的选择是,只需运行ifconfig并查看strace ifconfig ...,而不是浪费时间来获取和阅读100倍过于复杂的ioctl等遗留来源。它正在制作系统调用。实际上,这是一种很好的通用方法,可以从具有过于复杂的源逻辑或没有源代码的程序中复制行为。

答案 3 :(得分:0)

在我的debian盒子上,我可以

sudo apt-get install iproute{,-dev,-doc}
sudo apt-get build-dep iproute
apt-get source iproute --compile

这将为我提供ip(新的ifconfig)的源代码,用于构建iproute扩展的文档和开发标题。哦,源码将被编译:)

通过/usr/share/doc/iproute-do访问文档(examples/看起来很有趣)。