【问题标题】:How do you change an IP address in C++?如何在 C++ 中更改 IP 地址?
【发布时间】:2025-12-30 06:45:11
【问题描述】:

我需要在 C++ 中做一些与网络相关的事情,我通常会在 Linux 中使用 ifconfig 来做这些事情,但我想在不解析一组系统调用的输出的情况下做到这一点。我可以使用哪些 C 或 C++ 库来判断网络适配器是启动还是关闭、读取或更改适配器的 IP 地址和网络掩码以及更改默认 DNS 网关?

【问题讨论】:

    标签: c++ linux networking


    【解决方案1】:

    基本上,您需要使用套接字句柄(SIOCGIFADDR、SIOCADDRT)进行一系列 ioctl 调用。您可以在文档/网络下的 Linux 内核源代码中找到使用它的示例程序。其他一些可能有用的链接:

    编辑:我还要补充一点,如果您的目标是桌面 linux,那么您可以考虑使用 DBUS API 来使用 NetworkManager 查询网络参数。

    【讨论】:

    • 谢谢。我最终使用了 ioctl,这是我通过您提供的第一个链接发现的。
    【解决方案2】:

    您可以随时查看 ifconfig 的源代码,了解他们最初是如何做到的:http://archive.ubuntu.com/ubuntu/pool/main/n/net-tools/net-tools_1.60.orig.tar.gz

    【讨论】:

    • 谢谢。下次我尝试重新发明*时,我会记住这一点。 :)
    • + 因为我喜欢挖掘资源的人!
    【解决方案3】:

    NetworkManager 服务在dbus 上公开了一个 API,用于查询/操作当今许多发行版上的网络。对于您的目的而言,这可能过于高级(例如,您需要更好地控制网络,或者系统上没有 dbus/NetworkManager ......),但它可能会为您提供所需的内容。

    查看dbus C++ bindingsNetworkManager API(抱歉,我现在找不到更好的格式版本,但信息就在那里)。

    【讨论】: