Как я могу получить адреса (IPv4) для всех сетевых интерфейсов, используя только proc? После некоторого обширного расследования у меня есть обнаружил следующее:
-
ifconfig
используетSIOCGIFADDR
, для которого требуются открытые сокеты и знание всех имен интерфейсов. Он также не документируется на каких-либо страницах руководства на Linux. -
proc
содержит/proc/net/dev
, но это список статистики интерфейса. -
proc
содержит/proc/net/if_inet6
, что именно то, что мне нужно, но для IPv6. - В общем случае интерфейсы легко найти в
proc
, но фактические адреса используются очень редко, за исключением случаев, когда явная часть какого-либо соединения. - Существует системный вызов
getifaddrs
, который является очень "волшебной" функцией, которую вы ожидаете увидеть в Windows. Он также реализован на BSD. Однако он не очень ориентирован на текст, что затрудняет использование с языков, отличных от C.