Мне нужно сделать на C++ ряд вещей, связанных с сетью, которые я обычно делал бы с ifconfig в Linux, но я бы хотел сделать это без анализа вывода группы системных вызовов. Какие библиотеки C или C++ я могу использовать, чтобы определить, работает ли сетевой адаптер, прочитать или изменить IP-адрес и сетевую маску адаптера, а также изменить шлюз DNS по умолчанию?





В основном вам нужно сделать кучу вызовов ioctl, используя дескриптор сокета (SIOCGIFADDR, SIOCADDRT). Вы можете найти примеры программ, которые используют его в исходных кодах ядра Linux, в разделе «Документация / сеть». Некоторые другие ссылки, которые могут быть полезны:
Обновлено: Позвольте мне также добавить, что если ваша цель - настольный Linux, вы можете рассмотреть возможность использования DBUS API для запроса сетевых параметров с помощью NetworkManager.
Вы всегда можете посмотреть исходный код ifconfig, чтобы увидеть, как они это сделали в первую очередь: http://archive.ubuntu.com/ubuntu/pool/main/n/net-tools/net-tools_1.60.orig.tar.gz
Спасибо. Я запомню это в следующий раз, когда попытаюсь заново изобрести колесо. :)
+ потому что я люблю людей, которые копаются в источниках!
Служба Сетевой менеджер предоставляет API через dbus для запроса / управления сетью во многих дистрибутивах в наши дни. Это может быть слишком высокоуровневым для ваших целей (например, вам требуется более тонкий контроль над сетью, или dbus / NetworkManager недоступны в системе ...), но он может предоставить вам то, что вам нужно.
Ознакомьтесь с привязки dbus C++ и NetworkManager API (извините, я не могу сейчас найти более отформатированную версию, но информация есть).
Спасибо. В итоге я использовал ioctl, о котором я узнал по первой предоставленной вами ссылке.