我想设置MTU或获取一些设备详细信息,但我不想使用 system(“ifconfig ...”)。
有没有办法在C中做到这一点?有些像libifconfig.so?
可以找到MTU的源代码here。
但我现在真的没有太多时间。如何获取所有可用接口的名称(我的系统中有足够的接口)
答案 0 :(得分:4)
可以使用ioctl
完成。见netdevice(7)
。我猜你正在寻找SIOCGIFMTU
和SIOCSIFMTU
。我不知道它是否是标准的,如果你需要支持其他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/
看起来很有趣)。