我需要在C ++中做一些与网络相关的事情,我通常在Linux中使用ifconfig
,但是我想在不解析一组系统调用的输出的情况下这样做。我可以使用哪些C或C ++库来判断网络适配器是启动还是关闭,读取或更改适配器的IP地址和网络掩码,以及更改默认DNS网关?
答案 0 :(得分:4)
基本上你需要使用套接字句柄(SIOCGIFADDR,SIOCADDRT)进行一堆ioctl调用。您可以在Documentation / networking下的Linux内核源中找到使用它的示例程序。其他一些可能有帮助的链接:
编辑:我还要补充一点,如果您的目标是桌面Linux,那么您可以考虑使用DBUS API使用NetworkManager查询网络参数。
答案 1 :(得分:4)
您可以随时查看ifconfig的源代码,了解他们是如何做到的:http://archive.ubuntu.com/ubuntu/pool/main/n/net-tools/net-tools_1.60.orig.tar.gz
答案 2 :(得分:0)
NetworkManager服务公开API超过dbus,以便在最近的许多发行版中查询/操作网络。这可能对您的目的来说太高级了(例如,您需要更好地控制网络,或者系统上没有dbus / NetworkManager ......),但它可能会为您提供所需的信息。
查看dbus C++ bindings和NetworkManager API(抱歉,我现在找不到更好的格式化版本,但信息就在那里)。