Das Parsen der Ausgabe der Befehle ifconfig
und ip
erfolgt jedoch in Birnenrichtung.
Unter Linux können Sie es mit "ioctl (SIOCGIFADDR)" erhalten.
Es ist fast das gleiche wie das ursprüngliche Skript (Referenz 1 unten). Mit Python ist es einfach, weil Sie mit der angehängten Distribution so weit schreiben können.
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