热门标签 | 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的建议.



推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
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社区 版权所有