python从ip端口 获取数据_从python3.x中的列表中提取ip和端口

假设是IPv4地址,请尝试提取数字和关键标点符号。然后在必要时将有效结果切片。另外,验证ip地址可能是一种更安全的方法。在

在Python 3中:

编码import string

import ipaddress

def validate_port(func):

"""Return the results or raise and exception for invalid ports."""

def wrapper(arg):

result = func(arg)

if len(result) == 2 and not result[-1].isdigit():

raise ValueError("Invalid port number.")

return result

return wrapper

@validate_port

def discover_device(device):

"""Return a list of ip and optional port number. Raise exception for invalid ip."""

result = "".join(i for i in device if i in (string.digits +".:")).strip(":").split(":")

try:

ipaddress.ip_address(result[0])

except ValueError as e:

# Numbers in the device name (index 0) or invalid ip

try:

ipaddress.ip_address(result[1])

except IndexError:

raise e

else:

return result[1:]

else:

return result

演示

^{pr2}$

功能对周围字符不敏感

ip地址验证(非IPv6)和异常处理

防止设备名称中的数字

验证端口号(可选)

详情

通常,result是一个包含ip和可选端口号的列表。但是,如果设备名称中有数字,结果的第一个索引将包括不需要的数字。以下是result的示例:

^{3}$

异常处理测试设备名称中的数字,并验证第一个或第二个索引中的ip地址。如果找不到,则引发异常。在

虽然验证端口号超出了问题的范围,但是端口被假定为一个数字。向validate_port装饰器添加了一个简单的测试,可以根据需要应用或更新它。decorator筛选来自discover_device()的输出。如果端口不是纯数字,则引发异常。{有关修改^的限制,请参见}。请参见this blog以获得关于Python装饰器的优秀教程。在

选项

如果验证不是问题,只要设备名中没有".",以下代码就足够了:def discover_device(device):

result = "".join(i for i in device if i in (string.digits +".:")).strip(":").split(":")

if "." not in result[0]:

return result[1:]

return result

如果首选非装饰解决方案,请定义以下函数:def validate_port(result):

"""Return the results or raise and exception for invalid ports."""

if len(result) == 2 and not result[-1].isdigit():

raise ValueError("Invalid port number.")

return result

现在将discover_device()的返回值传递给后一个函数,即return validate_port(result[1:])和{}。在

向@coder咨询建议。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值