簡體   English   中英

有沒有更好的方法來檢查有效IPv4和IPv6的字符串?

[英]Any better way to check string for valid IPv4 and IPv6?

我有以下任務:

使用默認模塊確定字符串是否具有有效的IPv4或IPv6地址。 我在這里找到了一個使用套接字模塊的有趣方法:

import socket

ip = '10.1.0.10'
try:
    # test for IPv4
    socket.inet_pton(socket.AF_INET, ip)
except socket.error:
    try:
        # test for IPv6 
        socket.inet_pton(socket.AF_INET6, ip)
    except socket.error:
        print(ip, " is not valid")

在這種情況下嘗試嘗試似乎很難看,有更好的方法嗎? 考慮到我必須檢查大約100個IP的事實,是否有一個不同的模塊可以以更好的方式完成相同的操作。

您可以使用ipaddress模塊​​。 文檔可以在這里找到: https//docs.python.org/3/library/ipaddress.html

示例代碼:

>>> ipaddress.ip_address('192.168.0.1')
IPv4Address('192.168.0.1')
>>> ipaddress.ip_address('2001:db8::')
IPv6Address('2001:db8::')
>>> ipaddress.ip_address('323.4.7.8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/ipaddress.py", line 54, in ip_address
    address)
ValueError: '323.4.7.8' does not appear to be an IPv4 or IPv6 address
>>> ipaddress.ip_address('ffff::4543:1f1f::134')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/ipaddress.py", line 54, in ip_address
    address)
ValueError: 'ffff::4543:1f1f::134' does not appear to be an IPv4 or IPv6 address

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM