Где найти IP-адрес в файловой системе (например, proc или sys)

Есть ли способ получить IP-адрес (v4) интерфейса в файловой системе Android? Я знаю, что мог бы использовать ifconfig или netcfg, но я хотел бы использовать инструмент мониторинга, который может только обращаться к файлам, но не выполнять команды.

Ответы (2)

У меня нет Android, чтобы протестировать, но Linux предлагает:

 cat /proc/net/fib_trie

.. из https://unix.stackexchange.com/questions/365225/how-to-get-the-ipv4-address-for-an-interface-from-proc

Затем вывод можно отфильтровать с помощью grep, например

 cat /proc/net/fib_trie|grep '|--' | grep -vE ' 127|\.0[^0-9.]*$|\.255[^0-9.]*$'

Согласно сообщению на SO , cat /proc/net/tcpвернет его в

второй столбец с заголовком «local_address», например, «CF00A8C0:0203».

Часть после «:» — это номер порта.

Из остальных используйте последние два (C0) в качестве шестнадцатеричного числа, например, C0 — это 192, что является началом адреса в этом примере.

Дальше:

IP-адрес отображается как четырехбайтное шестнадцатеричное число с прямым порядком байтов; то есть наименее значащий байт указан первым, поэтому вам потребуется изменить порядок байтов, чтобы преобразовать его в IP-адрес.

Номер порта представляет собой простое двухбайтовое шестнадцатеричное число.

к сожалению, это не работает на моем телефоне. этот файл имеет только заголовки, но не данные. Я использую Android 4.4.2 на SGS4.
Ах я вижу. есть только данные, если tcp соединения активны. это не так практично для моей цели.
Вы также можете проверить с помощью /proc/net/arp, но я не уверен, что это имеет такое же ограничение. Что должно работать, так это просмотр информации об устройстве в /proc/net/dev, и выбор желаемого интерфейса (например, tiwlan0для WiFi в большинстве случаев).
/proc/net/arp на моем телефоне также пуст, а /proc/net/dev содержит только статистику, но не IP-адрес. :-(
Тогда у меня нет идей. Пока кто-то еще не может дать определенный ответ, вы можете использовать lson /proc/net/sys/...), чтобы проверить перспективных кандидатов.
Вы проверили /proc/sys/net? Также попробуйте запустить ipaddr из эмулятора терминала.
Я только что проверил на автономном устройстве. Похоже, /proc/net/tcpчто-то хранится (remote_addr равен 0.0.0.0, поэтому «бездействует»), снова используя шестнадцатеричные значения (как описано в моем ответе). В моем случае 0100007Fas local_address, что соответствует 127.0.0.1aka localhost. Похоже, это то, что вам нужно?