【发布时间】:2025-12-30 06:45:11
【问题描述】:
我需要在 C++ 中做一些与网络相关的事情,我通常会在 Linux 中使用 ifconfig 来做这些事情,但我想在不解析一组系统调用的输出的情况下做到这一点。我可以使用哪些 C 或 C++ 库来判断网络适配器是启动还是关闭、读取或更改适配器的 IP 地址和网络掩码以及更改默认 DNS 网关?
【问题讨论】:
标签: c++ linux networking
我需要在 C++ 中做一些与网络相关的事情,我通常会在 Linux 中使用 ifconfig 来做这些事情,但我想在不解析一组系统调用的输出的情况下做到这一点。我可以使用哪些 C 或 C++ 库来判断网络适配器是启动还是关闭、读取或更改适配器的 IP 地址和网络掩码以及更改默认 DNS 网关?
【问题讨论】:
标签: c++ linux networking
基本上,您需要使用套接字句柄(SIOCGIFADDR、SIOCADDRT)进行一系列 ioctl 调用。您可以在文档/网络下的 Linux 内核源代码中找到使用它的示例程序。其他一些可能有用的链接:
编辑:我还要补充一点,如果您的目标是桌面 linux,那么您可以考虑使用 DBUS API 来使用 NetworkManager 查询网络参数。
【讨论】:
您可以随时查看 ifconfig 的源代码,了解他们最初是如何做到的:http://archive.ubuntu.com/ubuntu/pool/main/n/net-tools/net-tools_1.60.orig.tar.gz
【讨论】:
NetworkManager 服务在dbus 上公开了一个 API,用于查询/操作当今许多发行版上的网络。对于您的目的而言,这可能过于高级(例如,您需要更好地控制网络,或者系统上没有 dbus/NetworkManager ......),但它可能会为您提供所需的内容。
查看dbus C++ bindings 和NetworkManager API(抱歉,我现在找不到更好的格式版本,但信息就在那里)。
【讨论】: