Cependant, la sortie de la commande ʻifconfig et de la commande ʻip
ne doit pas être analysée.
Sous Linux, vous pouvez l'obtenir avec ʻioctl (SIOCGIFADDR) `.
C'est presque le même que le script original (Référence 1 ci-dessous). Avec Python, c'est facile car vous pouvez écrire jusqu'à présent avec la distribution attachée.
import sys, socket, struct
from fcntl import ioctl
SIOCGIFADDR = 0x8915
if len(sys.argv) < 2:
print >> sys.stderr, "Usage:", sys.argv[0], "<interface name>"
sys.exit()
interface = sys.argv[1]
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
ifreq = struct.pack('16s16x', interface)
ifaddr = ioctl(s.fileno(), SIOCGIFADDR, ifreq)
finally:
s.close()
_, sa_family, port, in_addr = struct.unpack('16sHH4s8x', ifaddr)
print socket.inet_ntoa(in_addr)
Recommended Posts