【问题标题】:is there any C library available that contains APIs for ifconfig?是否有任何可用的 C 库包含 ifconfig 的 API?
【发布时间】:2011-05-18 18:47:57
【问题描述】:

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

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

MTU的源码可以在here找到。

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

【问题讨论】:

    标签: c linux network-programming


    【解决方案1】:

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

    编辑

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

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

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

    【讨论】:

    • Linux 上的 getifaddrs 也适用于了解 NIC 上的 MTU。
    【解决方案2】:

    当然有办法用 C 来做。问问自己 ifconfig 是用什么写的?

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

    如果我想亲自查看代码,我可以稍后对其进行编辑以包含 API。

    【讨论】:

    • 明智,但实际上更多的是评论。
    • 我回答了标题中提出的问题。如果这不是问题,那么它需要一个更好的标题。
    【解决方案3】:

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

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

    老实说,与其浪费时间获取和阅读 100 倍过于复杂的 ifconfig 等遗留资源,不如直接运行 strace ifconfig ... 并查看它正在生成的 ioctl 系统调用。实际上,这是从具有过于复杂的源逻辑或您没有源代码的程序中复制行为的通用方法。

    【讨论】:

      【解决方案4】:

      在我的 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/ 看起来很有趣)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2013-12-17
        • 1970-01-01
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 2013-10-21
        相关资源
        最近更新 更多