Alb*_*lby 0 python sockets validation
我有一个脚本,它使用 argparse 从命令行提取标志并使用套接字来验证 IP 地址。到目前为止,如果我只是使用标准的 IPv4 XXXX 格式,它就可以工作。我想要做的是验证包含 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()
Run Code Online (Sandbox Code Playgroud)
有一个ip地址模块可以完成这项工作。
类的构造函数Ip4Network处理255.255.255.255和255.255.255.255/32(以及 IPv6 格式,使用Ip6Network)
所以你可以添加你的代码
import ipaddress
Run Code Online (Sandbox Code Playgroud)
并Ip4Network使用以下代码创建一个:
try:
ip_addr = ipaddress.ip_address(args.ipaddr)
except ValueError:
# handle bad ip
Run Code Online (Sandbox Code Playgroud)
然后,继续在套接字上执行您的代码:
socket.inet_aton(str(ip_addr))
Run Code Online (Sandbox Code Playgroud)
您只需将其转换为字符串。
在ipaddress必须从仓库进行安装(py2-ipaddress),并具有之间的一些问题str和bytearray字符串的解释(参见这里)
所以如果你这样做,它在我的实验中有效:
ipaddress.ip_address(bytearray('192.168.1.1'))
ipaddress.ip_network(u'10.0.0.0/24')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6678 次 |
| 最近记录: |