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