Korrekte IP-Adresse Eingabe Python?

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Das geht gut mit RegEx (Regular Expressions), z. B.:

import re

REGEX_IPV4 = '^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'

if re.match(REGEX_IPV4, input_ip) is not None:
  print(input_ip + "is a valid IP Address")
Woher ich das weiß:eigene Erfahrung

Bb4cm 
Beitragsersteller
 18.12.2020, 18:06

Und wie würde es bei MAC-Adressen aussehen? Bloß es sollen auch nur die ersten 6 Ziffern mit und ohne ":" eingegeben werden können und klein Schreibung muss auch akzeptiert werden also z.B. ffffff oder ff:ff:ff bei FF:FF:FF:FF:FF:FF soll auch akzeptiert werden aber es sollen keine Zeichen dabei sein die bei Hexadezimal (MAC Adressen) nicht gibt also z.B. alles ab g im Alphabet.

0

Neben den bisher beschriebenen RegExps gibt es natürlich je nach Anwendungsfall weitere Möglichkeiten:

>>> socket.inet_aton('269.3.14.45')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: illegal IP address string passed to inet_aton
>>> socket.inet_aton('192.168.0.31')
b'\xc0\xa8\x00\x1f'

v4 only!

>>> socket.inet_pton(socket.AF_INET6,'fe80::ec4:7aff:fec8:8090')
b'\xfe\x80\x00\x00\x00\x00\x00\x00\x0e\xc4z\xff\xfe\xc8\x80\x90'
>>> socket.inet_pton(socket.AF_INET6,'fe80::ec4::7aff:fec8:8090')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: illegal IP address string passed to inet_pton
>>> socket.inet_pton(socket.AF_INET,'280.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: illegal IP address string passed to inet_pton
>>> socket.inet_pton(socket.AF_INET,'192.168.0.30')
b'\xc0\xa8\x00\x1e'

D.h., Du fängst die Exception, um festzustellen, daß es keine gültige IP ist.


KarlRanseierIII  17.12.2020, 16:56

Ein anderer Ansatz, der ohne RegExp auskommt:

ipstr="192.168.900.12"
len( [atom for atom in ipstr.split('.') if int(atom)>=0 and int(atom)<256] )

Im Falle einer Exception oder wenn len!=4, handelt es sich um keien IPv4.

0

Mit Hilfe des ipaddress moduls kannst du das ab Python 3.3 recht einfach lösen, z.B.:

import ipaddress
ip=input("IP eingeben:")

try:
   ipaddress.IPv4Address(ip)
   print("%s ist eine gültige IP" % ip)
except:
   print("%s ist keine gültige IP" % ip)

https://docs.python.org/3/library/ipaddress.html