Как вы меняете IP-адрес в C ++?

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

Ответы на вопрос(3)

Решение Вопроса

По сути, вам нужно выполнить несколько вызовов ioctl, используя дескриптор сокета (SIOCGIFADDR, SIOCADDRT). Вы можете найти примеры программ, которые используют его в исходном коде ядра Linux, в разделе Документация / Сеть. Некоторые другие ссылки, которые могут быть полезны:

Операции сетевого интерфейса в AIXРеализация XBMC (проверить CNetworkInterfaceLinux)

РЕДАКТИРОВАТЬ: Позвольте мне также добавить, что если ваша цель является Linux для настольных ПК, то вы можете рассмотреть возможность использования API DBUS для запроса параметров сети с помощью NetworkManager.

http://people.redhat.com/dcbw/NetworkManager/NetworkManager DBUS API.txt (извините, в редактировании есть проблемы с вставкой ссылок)
 Bill the Lizard19 дек. 2008 г., 22:28
Благодарю. В итоге я использовал ioctl, о котором узнал по первой указанной вами ссылке.
 BЈовић08 сент. 2017 г., 16:48
что именно читать в документации / сети?

Вы всегда можете посмотреть на исходный код ifconfig, чтобы увидеть, как они это сделали в первую очередь:http://archive.ubuntu.com/ubuntu/pool/main/n/net-tools/net-tools_1.60.orig.tar.gz

 morandg08 сент. 2011 г., 15:54
+ потому что я люблю людей, которые копают в источниках!
 Bill the Lizard19 дек. 2008 г., 22:29
Благодарю. Я буду помнить это в следующий раз, когда я пытаюсь заново изобрести колесо. :)

Сетевой менеджер сервис выставляет API поверхDBus для запросов / манипулирования сетью во многих дистрибутивах в эти дни. Это может быть слишком высокий уровень для ваших целей (например, вам требуется более точное управление сетью, или dbus / NetworkManager недоступен в системе ...), но он может предоставить вам то, что вам нужно.

Проверьтепривязки dbus C ++ иAPI NetworkManager (извините, я не могу найти лучше отформатированную версию прямо сейчас, но информация там есть).

Ваш ответ на вопрос