3 Stimmen

Ich versuche, meine Subnetzadresse in Python-Code zu verwenden

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?

8voto

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X