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



推荐阅读
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文全面解析了 Python 中字符串处理的常用操作与技巧。首先介绍了如何通过 `s.strip()`, `s.lstrip()` 和 `s.rstrip()` 方法去除字符串中的空格和特殊符号。接着,详细讲解了字符串复制的方法,包括使用 `sStr1 = sStr2` 进行简单的赋值复制。此外,还探讨了字符串连接、分割、替换等高级操作,并提供了丰富的示例代码,帮助读者深入理解和掌握这些实用技巧。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Keepalived 提供了多种强大且灵活的后端健康检查机制,包括 HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK 和 MISC_CHECK 等多种检测方法。这些健康检查功能确保了高可用性环境中的服务稳定性和可靠性。通过合理配置这些检查方式,可以有效监测后端服务器的状态,及时发现并处理故障,从而提高系统的整体性能和可用性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文将继续探讨 JavaScript 函数式编程的高级技巧及其实际应用。通过一个具体的寻路算法示例,我们将深入分析如何利用函数式编程的思想解决复杂问题。示例中,节点之间的连线代表路径,连线上的数字表示两点间的距离。我们将详细讲解如何通过递归和高阶函数等技术实现高效的寻路算法。 ... [详细]
  • 本文探讨了一种高效的算法,用于生成所有数字(0-9)的六位组合,允许重复使用数字,并确保这些组合的和等于给定的整数N。该算法通过优化搜索策略,显著提高了计算效率,适用于大规模数据处理和组合优化问题。 ... [详细]
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社区 版权所有