Python:如何使用CIDR表示法验证IP地址(导入套接字)

时间:2017-08-31 18:49:06

标签: python validation sockets

我有一个脚本,它使用argparse从命令行中提取标志并使用socket验证IP地址。到目前为止,如果我只使用标准的IPv4 X.X.X.X格式,它可以工作。我想要做的是验证包含CIDR表示法的IP地址。如何修改我的代码以验证CIDR字段中的2位整数(即:192.168.2.1/32)

import argparse
import socket

parser = argparse.ArgumentParser()
parser.add_argument("-i", "--ipaddr")
args = parser.parse_args()

# Validate IP Address Given in (-i) argparse
try:
        s = socket.inet_aton(args.ipaddr)
except socket.error:
        print ""
        print("Bad IP Address entered")
        print ""
        sys.exit()

1 个答案:

答案 0 :(得分:3)

Python 3

有一个ipaddress模块可以完成这项工作。

Ip4Network的构造函数处理255.255.255.255255.255.255.255/32(以及IPv6格式,Ip6Network

因此,您可以添加代码

import ipaddress

并使用以下代码创建Ip4Network

try:
    ip_addr = ipaddress.ip_address(args.ipaddr)
except ValueError:
    # handle bad ip

然后,继续使用套接字上的代码:

socket.inet_aton(str(ip_addr))

你只需要用字符串转换它。

Python 2.7

必须从存储库(ipaddress)安装py2-ipaddress,并且在strbytearray字符串解释之间存在一些问题(请参阅here)< / p>

如果你这样做,它可以在我的实验中使用:

ipaddress.ip_address(bytearray('192.168.1.1'))
ipaddress.ip_network(u'10.0.0.0/24')