2012-07-16 2 views
1

Les autres questions ne sont pas tout à fait les mêmes.Obtenir toutes les adresses IP externes d'un hôte

Ce que je suis à la recherche à atteindre est une fonction Python qui retourne une liste de toutes les adresses IP sur un système, émulant le comportement de:

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

Répondre

5

Vous pouvez utiliser le module python subprocess pour y parvenir .

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") 

Cela devrait vous donner une liste d'adresses IP.

PS: Il sera préférable d'utiliser la commande suivante à la place

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

Cela exclut IPV6 adresse le cas échéant.

pur Python Way

Si vous cherchez à faire entièrement en Python, puis module python caisse netifaces.

+0

+1 pour le module 'netifaces' – dave

+1

Cela fonctionne bien. Je ne peux pas utiliser netifaces car il n'est pas inclus dans Python par défaut et je dois l'exécuter sur plusieurs hôtes distants – Rory

+0

Vous pouvez installer des netifaces. Après tout, quelqu'un a installé Python. En outre, les chances que les netifaces fonctionnent sur des machines aléatoires sont un peu plus élevées que les chances que ifconfig, grep, awk et cut se comportent exactement de la même façon (sans ajustement d'option, etc.) sur des machines aléatoires. Vous pouvez au moins envisager d'effectuer l'analyse des chaînes dans * Python * afin que vous n'ayez à lancer que ifconfig et ne pas compter sur ces autres outils et pipelines shell. –

Questions connexes