热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

假设有一个IPv4地址,请尝试提取数字和关键标点符号.然后在必要时切片有效结果.验证IP地址也可能是一种更安全的方法.在Python3中:码importstringi

假设有一个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

演示

discover_device("[]")

# ['192.168.222.123']

discover_device("[]")

# ['192.168.222.123', '8075']

discover_device("[]")

# ['192.168.222.123', '8080']

discover_device("[]")

# ValueError: '192.168.222123' does not appear to be an IPv4 or IPv6 address

discover_device("[]")

# ValueError: '192.168.222123' does not appear to be an IPv4 or IPv6 address

discover_device("[]")

# ValueError: Invalid port number.

特征

>对周围的人物不敏感

> IP地址验证(不是IPv6)和异常处理

>防止设备名称中的数字

>验证端口号(可选)

细节

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

# ['192.168.222.123'] ip

# ['192.168.222.123', '8075'] ip, port

# ['192.168.222123'] invalid ip

# ['.34', '192.168.222.123', '8080'] device #, ip, port

# ['192.168.222.123', '80.805'] invalid port

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

虽然验证端口号超出了问题的范围,但端口被假定为数字.在validate_port装饰器中添加了一个简单的测试,可以根据需要应用或更新.装饰器屏蔽discover_device()的输出.如果端口不是纯数字,则会引发异常.有关修改限制,请参阅this post.有关Python装饰器的精彩教程,请参阅this blog.

选项

如果不需要验证,则下列代码应该足够,只要“.”设备名称中缺少:

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()的返回值传递给后一个函数,即返回validate_port(result [1:])并返回validate_port(result).

关于@coder的建议.



推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • Python的参数解析argparse模块的学习
    本文介绍了Python中参数解析的重要模块argparse的学习内容。包括位置参数和可选参数的定义和使用方式,以及add_argument()函数的详细参数关键字解释。同时还介绍了命令行参数的操作和可接受数量的设置,其中包括整数类型的参数。通过学习本文内容,可以更好地理解和使用argparse模块进行参数解析。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
  • 数学建模入门python绘制频率直方图
    文章目录例题数据处理绘图操作调用演示例题数据处理将以下的数据保存到磁盘上17275169551696417165167471716216867165521696216865 ... [详细]
  • 交换机配置:intg100unshintvlani1ipadd192.168.56.177qstelseuser-iv4authaaaproinsshupl3qsshuserpyt ... [详细]
author-avatar
老爷们白百合开在秋天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有