Ich versuche, meine IP-Subnetzadresse (192.168.1.xxx) in meinem Python-Code zu erhalten. Ich verwende Linux/osx. Wie kann ich dies tun / Was ist der beste Weg, dies zu tun?
Antwort
Zu viele Anzeigen?
jathanism
Punkte
31729
Meiner Erfahrung nach ist es am einfachsten, zwei Pakete von Drittanbietern zu verwenden:
- python-netifaces : Informationen zur tragbaren Netzwerkschnittstelle
- python-netaddr : Pythonische Manipulation von IPv4, IPv6, CIDR, EUI und MAC-Netzwerkadressen
Installieren Sie also diese Module und dann ist es so einfach wie das hier:
import netifaces
import netaddr
import socket
from pprint import pformat
ifaces = netifaces.interfaces()
# => ['lo', 'eth0', 'eth1']
myiface = 'eth0'
addrs = netifaces.ifaddresses(myiface)
# {2: [{'addr': '192.168.1.150',
# 'broadcast': '192.168.1.255',
# 'netmask': '255.255.255.0'}],
# 10: [{'addr': 'fe80::21a:4bff:fe54:a246%eth0',
# 'netmask': 'ffff:ffff:ffff:ffff::'}],
# 17: [{'addr': '00:1a:4b:54:a2:46', 'broadcast': 'ff:ff:ff:ff:ff:ff'}]}
# Get ipv4 stuff
ipinfo = addrs[socket.AF_INET][0]
address = ipinfo['addr']
netmask = ipinfo['netmask']
# Create ip object and get
cidr = netaddr.IPNetwork('%s/%s' % (address, netmask))
# => IPNetwork('192.168.1.150/24')
network = cidr.network
# => IPAddress('192.168.1.0')
print 'Network info for %s:' % myiface
print '--'
print 'address:', address
print 'netmask:', netmask
print ' cidr:', cidr
print 'network:', network
Und diese Ausgaben:
Network info for eth0:
--
address: 192.168.1.150
netmask: 255.255.255.0
cidr: 192.168.1.150/24
network: 192.168.1.0
Dies wurde unter Linux durchgeführt. Unter OSX sind die Schnittstellennamen anders, aber die Methode ist die gleiche.