Получить адреса локальных сетевых интерфейсов, используя только proc?

Как я могу получить адреса (IPv4) для всех сетевых интерфейсов, используя только proc ? После обширного исследования я обнаружил следующее:

  1. ifconfig использует SIOCGIFADDR , который требует открытых сокетов и предварительных знаний всех имен интерфейсов. Это также не задокументировано ни на одной странице руководства по Linux.
  2. proc содержит / proc / net / dev , но это список статистики интерфейса.
  3. proc содержит / proc / net / if_inet6 , что именно то, что мне нужно, но для IPv6.
  4. Обычно интерфейсы легко найти в proc , но фактические адреса используются очень редко, за исключением тех случаев, когда они явно являются частью какого-либо соединения.
  5. Существует системный вызов getifaddrs , который является очень «волшебной» функцией, которую вы ожидаете увидеть в Windows. Это также реализовано в BSD. Однако он не очень ориентирован на текст, что затрудняет использование языков, отличных от C.

39
задан Andrew Grimm 6 October 2011 в 23:14
поделиться