Получить все внешние IP-адреса хоста

Остальные вопросы не совсем такие.

То, что я ищу для достижения, - это функция Python, которая возвращает список всех IP-адресов в системе, эмулируя поведение:

ifconfig | grep 'inet addr:' | grep -v 127.0.0.1 | cut -d: -f2 | awk '{ print $1}'

person Rory    schedule 16.07.2012    source источник


Ответы (1)


Для этого вы можете использовать модуль Python subprocess.

import subprocess
cmd = "ifconfig | grep 'inet addr:' | grep -v 127.0.0.1 | cut -d: -f2 | awk '{ print $1}'"
co = subprocess.Popen([cmd], shell = True, stdout = subprocess.PIPE)
ips = co.stdout.read().strip().split("\n")

Это должно дать вам список IP-адресов.

PS: вместо этого лучше использовать следующую команду

ifconfig | grep inet | grep -v inet6 | grep -v 127.0.0.1 | awk '{print $2}' | cut -d\: -f2 | cut -d\  -f1

Это исключит адреса IPV6, если таковые имеются.

Путь Python в чистом виде

Если вы хотите сделать это полностью на Python, ознакомьтесь с модулем Python netifaces.

person Kulbir Saini    schedule 16.07.2012
comment
Это хорошо работает. Я не могу использовать netifaces, потому что он не включен в Python по умолчанию, и мне нужно запустить его на нескольких удаленных хостах. - person Rory; 16.07.2012
comment
Вы можете установить нетифейс. В конце концов, кто-то установил Python. Кроме того, вероятность того, что netifaces будет работать на случайных машинах, немного выше, чем вероятность того, что ifconfig, grep, awk и cut будут вести себя точно так же (без настройки параметров и т. д.) на случайных машинах. Вы могли бы, по крайней мере, подумать об анализе строк в Python, чтобы вам только приходилось запускать ifconfig, а не полагаться на эти другие инструменты и конвейеры оболочки. - person Jean-Paul Calderone; 16.07.2012
comment
netifaces не ставит python в том смысле, что для него требуется встроенный модуль C - person jeckhart; 24.01.2013
comment
Чрезвычайно неэффективный grep | grep | awk можно было бы легко заменить чистым Python, а также избежать shell=True, который является проблемой безопасности. См. также stackoverflow.com/a/32713301/874188. - person tripleee; 22.09.2015