Python‘s Standard Library :Networking

news/2024/5/19 19:19:27/

Python’s Standard Library :Networking

Python的标准库为创建网络服务和远程访问服务提供了一些模块。例如:ipaddress, socket, socketserver 等。

Python’s standard library comes complete with modules for creating network services, as well as for accessing existing services remotely. The ipaddress module includes class for validating, comparing, and otherwise operating on IPv4 and IPv6 network addresses. The low-level socket library provides direct access to the native C socket library, and can be used to communicate with any network service.

Finding Service Information

In addition to an IP address, each socket address includes an integer port number. Many applications can run on the same host, listening on a single IP address, but only one socket at a time can use a port at that address. The combination of IP address, protocol, and port number uniquely identifies a communication channel and ensures that messages sent through a socket arrive at the correct destination.

Some of the port numbers are pre-allocated for a specific protocol. For example, communication between email servers using SMTP occurs over port numbers 25 using TCP, and standardized names can be looked up with getservbyname().

The example codes are as follow:

import socket
from urllib.parse import urlparseURLS = ['http://www.python.org','https://www.mybank.com','ftp://prep.ai.mit.edu','gopher://gopher.micro.umn.edu','smtp://mail.example.com','imap://mail.example.com','imaps://mail.example.com','pop3://pop.example.com','pop3s://pop.example.com',
]for url in URLS:parsed_url = urlparse(url)port = socket.getservbyname(parsed_url.scheme)print('{:>6}  : {}'.format(parsed_url.scheme, port))

Although a standardized service is unlikely to change ports, looking up the value with a system call instead of hard-coding it is more flexible when new services are added in the future.

The result is as follow:

D:\Python39\python.exe D:/My_Project/standard_library/socket_getservbyname.pyhttp  : 80https  : 443ftp  : 21
gopher  : 70smtp  : 25imap  : 143imaps  : 993pop3  : 110pop3s  : 995Process finished with exit code 0

To reverse the service port lookup, use getservbyport().

The example codes are as follows:

import socketfor port in [80, 443, 21, 70, 25, 143, 993, 110, 995]:url = '{}://example.com/'.format(socket.getservbyport(port))print(url)

The reverse lookup is useful for constructing URLs to services from arbitrary addresses.

The result is as follow:

D:\Python39\python.exe D:/My_Project/standard_library/socket_getservbyport.py
http://example.com/
https://example.com/
ftp://example.com/
gopher://example.com/
smtp://example.com/
imap://example.com/
imaps://example.com/
pop3://example.com/
pop3s://example.com/Process finished with exit code 0

To retrieve the number assigned to a transport protocol, use getprotobyname.

The example codes are as follow:

import socketdef get_constants(prefix):'''Create a dictionary mapping socket modulecontants to their names.'''return {getattr(socket, n): n for n in dir(socket)if n.startswith(prefix)}protocols = get_constants('IPPROTO_')for name in ['icmp', 'udp', 'tcp']:proto_num = socket.getprotobyname(name)const_naem = protocols[proto_num]print('{:>4}  -> {:2d} (socket.{:<12} = {:2d})'.format(name, proto_num, const_naem,getattr(socket, const_naem)))

The values for protocol numbers are standardized, and defined as constants in socket with the prefix IPPROTO_.

The result is as follow:

D:\Python39\python.exe D:/My_Project/standard_library/socket_getprotobyname.py
icmp  ->  1 (socket.IPPROTO_ICMP =  1)udp  -> 17 (socket.IPPROTO_UDP  = 17)tcp  ->  6 (socket.IPPROTO_TCP  =  6)Process finished with exit code 0

http://www.ppmy.cn/news/47427.html

相关文章

JAVA面试宝典: SpringCloud知识点(通俗易懂易背)

1、什么是 Spring Cloud&#xff1f; Spring Cloud 是基于 Spring Boot 的微服务架构开发工具箱&#xff0c;提供了在分布式系统中构建可靠的、弹性的、灵活的应用所需的大多数工具。Spring Cloud 中包含的子项目如下&#xff1a; Spring Cloud Config&#xff1a;配置管理工具…

STL :双端队列容器 Deque

Deque #include<deque> using namesace std; 双端队列容器 &#xff1a;双向开口的连续线性空间&#xff1b; 擅长尾部和头部添加或删除元素&#xff1a;常数阶&#xff1b; 存储元素并不能保证所有元素都存储到连续的内存空间中&#xff1b; deque 是动态的以分段…

系统需求分析

系统需求分析 需求分析是软件生存周期中相当重要的一个阶段。由于开发人员熟悉计算机但不熟悉应用 领域的业务&#xff0c;用户熟悉应用领域的业务但不熟悉计算机&#xff0c;因此对于同一个问题&#xff0c;开发人员和用 户之间可能存在认识上的差异。在需求分析阶段&#xff…

java记录-lambda表达式、接口应用、方法引用

基本形式 (str)->{System.out.println(str) };调用作为参数的接口实例的方法 1、用一个类实现接口&#xff0c;然后使用该类实例调用方法 2、匿名内部类 3、在 接口&#xff08;不能是抽象类&#xff09; 有且只有一个抽象方法时&#xff0c;可以使用lamda表达式来重写这个…

蓝桥 卷“兔”来袭编程竞赛专场-07明码加密 题解

赛题介绍 挑战介绍 清末&#xff0c;电报技术进入中国。上海大北水线电报公司在 1871 年选用了六千八百九十七个汉字&#xff0c;代以四码数字&#xff0c;编写成了中国最早的电报明码本。为了传输的内容可以保密&#xff0c;又设计出了将明码本加密的方法&#xff0c;于是就…

华为OD机试真题(Java),最小步骤数(100%通过+复盘思路)

一、题目描述 一个正整数数组 设为nums&#xff0c;最大为100个成员&#xff0c;求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。 要求&#xff1a; 第一步 必须从第一元素起 且 1<第一步步长<len/2 (len为数组长度)&#xff1b;从第二步开始只能以所…

Junit概述和快速入门

单元测试概述 在程序中&#xff0c;一个单元可以是一个完整的模块&#xff0c;但它通常是一个单独的方法或者程序 在面向对象的编程中&#xff0c;一个单元通常是整个界面&#xff0c;例如类&#xff0c;但可能是单个方法 JUnit是一个java编程语言的单元测试框架 通过先为最…

从头创建一个新的浏览器,这合理吗?

从头构建一个新浏览器&#xff1f;这如果是不是个天大的“伪需求”&#xff0c;便是一场开发者的噩梦&#xff01; 要知道&#xff0c;如果没有上百亿的资金和数百名研发工程师的投入&#xff0c;从头开始构建一个新的浏览器引擎&#xff0c;几乎是不可能的。然而SerenityOS系统…

Ubuntu18.04通过一根网线与树莓派建立连接,远程操作树莓派,向树莓派传文件

文章目录 前言1 树莓派设置静态IP1.1 不能登录到树莓派的图形化界面1.2 可以登录到树莓派的图形化界面 2 PC端的ubuntu18.04设置静态ip地址2.1 不使用图形化界面操作2.2 使用图形化界面进行操作 3 Putty软件3 FileZilla软件 前言 本篇博客的应用场景&#xff0c;前提条件如下&a…

【原理图专题】OrCAD Capture 设计规则(DRC)检查

在原理图设计完成后,需要进行DRC检查,DRC检查能协助工程师快速检查原理图的物理、电气规则是否正确,能快速定位错误和原因。 DRC检查从Capture 工具栏中如下图红框所示的图标中Design Rules Check进入 进入后将打开DRC窗口,有四个选项卡。分别是Design Rules Options、Elec…

区域检验管理系统(云LIS)源码

1、区域检验管理系统&#xff08;云LIS&#xff09;概述 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff0c;对区域内的检验数据进行集中管理和共享&#xff0c;通过对质量控制的管理&am…

OrCAD创建原理图库

OrCAD创建原理图库 概述常规器件建库方法大封装器件建库基于pinout表格创建原理图库导入方法&#xff1a; 通过fsp软件导入fpga原理图库 概述 原理图库是硬件设计的基本工作&#xff0c;每个新人都要先学会建库&#xff0c;才能开始画图&#xff0c;本文主要介绍几种常用的建库…

5.2 中心极限定理

学习目标&#xff1a; 要学习中心极限定理&#xff0c;我会采取以下几个步骤&#xff1a; 学习基本概念&#xff1a;了解什么是随机变量、样本、总体、概率密度函数等基本概念&#xff0c;为学习中心极限定理打下基础&#xff1b;学习正态分布&#xff1a;中心极限定理的核心…

vue.ts规范

Vue.js是一个非常流行的前端框架&#xff0c;支持使用TypeScript增加应用程序的类型安全性、可读性和可维护性。使用Vue.js和TypeScript进行混合编程需要一些额外的工作&#xff0c;今天我来为大家介绍一些Vue.js和TypeScript混合编程的最佳实践。 1.安装TypeScript和Vue.js类型…

TexMaker(Latex编辑器)软件的“文献引用”操作:Xelatex方式运行的操作方法

一、说明 1. 针对问题 本文主要讲解使用TexMaker进行**.bib的方法**的文献引用时&#xff0c;如何使用Xelatexpdf的方式完成文献引用。某些文章强调使用PDFlatex进行编译&#xff0c;但有时候会因为论文模板不同&#xff0c;无法运行padflatexPDF。所以&#xff0c;这里给出xe…

C# 屏幕截图

C# 屏幕截图 c#实现屏幕截图 Graphics 类的CopyFromScreen方法可以拿到整个屏幕的截图&#xff0c;屏幕截图的实现主要就是用到了他 思路是首先将整个屏幕的图像截取下来&#xff0c;然后作为一个窗体的背景显示给用户&#xff0c;由用户选择要截取的区域 后&#xff0c;保存图…

移动版OpenAI,手机的杀手还是救星?

AI登陆手机&#xff0c;难度因人而异。 原本小编还以为「2023年是属于元宇宙的一年」&#xff0c;实在没想到以ChatGPT为代表的AI技术能在这么短的时间内抢走元宇宙的风头&#xff0c;成为2023年的技术关键词。从OpenAI到搜索引擎、从绘图工具到游戏公司&#xff0c;几乎所有「…

2. VBA Excel宏

在本章中&#xff0c;我们来学习如何逐步编写一个简单的宏。 第1步 - 首先&#xff0c;在Excel 2016中启用“开发者”菜单。要完成这个设置&#xff0c;请点击左上角菜单&#xff1a;文件 -> 选项。如下图所示 - 第2步 - 点击“自定义功能区”选项卡并选中“开发工具”。然…

【uniapp】sigmob广告加载失败:-5005、500422没有imei的解决办法(原创可用)

问题 最近打算将开发的uniapp应用对接uni-ad广告中去&#xff0c;在对接sigmob的时候出现了以下问题&#xff1a;①错误码-5005&#xff0c;查询了以下官方文档&#xff0c;发现是说我频繁调用&#xff0c;可是并没有&#xff0c;我是在真机上测试的没成功就没在弄了&#xff…

pyest+appium实现APP自动化测试,思路全总结在这里

目录 01、appium环境搭建 2、搭建pythonpytestappium环境 3、安装pycharm搭建项目编写脚本 4、执行测试 绵薄之力 01、appium环境搭建 安装nodejs http://nodejs.cn/ 为什么要安装nodejs&#xff1f; 因为appium这个工具的服务端是由nodejs语言开发的 安装jdk&#xf…