Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现

这篇具有很好参考价值的文章主要介绍了Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现



前言

IP(Internet Protocol) 地址是唯一标识互联网上连接至计算机或其他设备的地址。每一个设备在 IP 网络中拥有一个不同的 IP 地址,它由 32 位二进制数组成,通常表示为四个从 0 到 255 的十进制数之间用 (.)号隔开。

端口则是计算机用于区分特定进程或服务的抽象概念,每台服务器可以提供多种不同的服务,而每个网络应用程序则与一个特定端口关联。例如,Web 服务器使用通常使用端口号为80, 而邮件服务器使用的是25号端口。端口号是一个16位的整数,取值范围是 0 到 65535。其中 0 到 1023 是被保留的端口,通常给系统进程或众所周知的服务使用,而 1024 到 49151 是被分配给 用户进程或应用程序可以使用的端口,而49152到65535通常是私有或短暂的端口用于客户端发起请求时。 在建立网络连接时,发起通信的设备需要指定目标设备的 IP 地址和目标应用程序的端口号才能成功连接。

下面我们结合python代码,使用socket了解一下IP与端口。


获取本机设备名和IP

下面是一个使用Python Socket库的示例代码,用于获取本地和远程机器信息,以及转换IPv4地址和查找端口所对应的服务名称。

首先导入必要的模块,包括Socket库和binascii库。

import socket
from binascii import hexlify

接下来定义了一个打印本机设备名和IP地址的函数print_machine_info()。调用socket.gethostname()获取主机名,然后将该主机名传递给socket.gethostbyname()函数以获取主机的IP地址。

def print_machine_info():
	host_name = socket.gethostname()
	print("Host name:%s" % host_name)
	print("Host IP address:%s" % socket.gethostbyname(host_name))

获取远程设备的IP地址

接着是获取远程机器信息的函数get_remote_machine_info()。传递一个远程主机名(默认为’www.python.org’)并使用socket.gethostbyname(remote_host)获取其IP地址。

def get_remote_machine_info(remote_host='www.python.org'):

	try:
		print("remote machine IP address:%s" % socket.gethostbyname(remote_host))
	except socket.error as err_msg:
		print("%s:%s" % (remote_host, err_msg))

将IPv4地址转换成以十六进制形式表示二进制数据

然后是一个用于将IPv4地址转换成以十六进制形式表示的打包二进制数据的函数convert_ip4_address()。它遍历提供的IPv4地址列表,并使用socket.inet_aton()函数将字符串格式的IPv4地址转换为32位二进制数据,并打印出打包后的二进制表示和解包后的地址字符串。

def convert_ip4_address(addrList=['127.0.0.1', '192.168.0.1']):
	for ip_addr in addrList:
		packed_ip_addr = socket.inet_aton(ip_addr)
		unpacked_ip_addr = socket.inet_ntoa(packed_ip_addr)
		print("IP Address: %s => Packed:%s, Unpacked:%s" % (ip_addr, hexlify(packed_ip_addr), unpacked_ip_addr))

获取端口的服务名

最后是查找端口对应服务名称的函数find_service_name()。它遍历提供的端口列表,调用socket.getservbyport()函数获取该端口对应的服务名称。同时,它还显示了一个特殊情况:将53号端口与’udp’协议一起使用。

def find_service_name(protocolname='tcp', portList=[80, 25]):
	for port in portList:
		print("Port:%s => service name:%s" % (port, socket.getservbyport(port, protocolname)))
	print("Port:%s => service name:%s" % (53, socket.getservbyport(53, 'udp')))

调用及运行结果

如果这个Python模块被单独执行,main函数中的这四个函数将被按顺序调用,并分别打印出信息。

if name == 'main':
	print_machine_info()
	get_remote_machine_info()
	convert_ip4_address()
	find_service_name()

Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现

总而言之,此代码演示了如何使用Python Socket库访问本地和远程机器的IP地址,并转换IPv4地址和查找端口对应的服务名称。文章来源地址https://www.toymoban.com/news/detail-439952.html

到了这里,关于Python网络编程(一)——了解IP和端口的基础知识以及socket的简单实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络编程 tcp udp http编程流程 网络基础知识

    OSI分层:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip: 应用层 传输层 网络层 数据链路 ip地址:唯一标识一台主机 ipv4 32位 ipv6 128位 寻址 可以反映物理上的一个变化 MAC地址:48 固化在计算机中 ip地址又两部分构成:网络号+主机号 端口号:标识一个应用程序

    2024年02月13日
    浏览(74)
  • Linux网络编程 网络基础知识

    目录 1.网络的历史和协议的分成 2.网络互联促成了TCP/IP协议的产生 3.网络的体系结构 4.TCP/IP协议族体系 5.网络各层的协议解释 6.网络的封包和拆包 7.网络预备知识      Internet-\\\"冷战\\\"的产物 1957年十月和十一月,前苏联先后欧两颗”Spuinik”卫星上天 1958年美国总统艾森豪威尔向

    2024年02月10日
    浏览(48)
  • 学习网络编程No.1【网络基础知识】

    北京时间:2023/8/4/22:40,天苍苍野茫茫,风吹造地见牛羊,此时心潮澎湃,非常开心,啊哈哈哈!因为就在刚刚我们终于把系统编程方面的知识给学完了,啊哈哈哈!真是功夫不负有心人呀!呜呜呜,仰天而泣,算了,不能发神经,哈哈!今天把最后一节有关多线程知识的课

    2024年02月14日
    浏览(56)
  • 《3.linux应用编程和网络编程-第8部分-3.8.网络基础》 3.8.1.网络通信概述 3.8.3.网络通信基础知识2

        进程间通信: 管道 、 信号量、 共享内存, 技术多,操作麻烦     线程就是解决 进程间 通信 麻烦的事情,这是线程的 优势 3.8.1.网络通信概述 3.8.1.1、从进程间通信说起: 网络域套接字socket , 网络通信其实就是位于网络中不同主机上面                   的 

    2024年02月15日
    浏览(56)
  • 网络基础知识&socket编程

    Linux 系统是依靠互联网平台迅速发展起来的,所以它具有强大的网络功能支持,也是Linux 系统的一大特点。互联网对人类社会产生了巨大影响,它几乎改变了人们生活的方方面面,可见互联网对人类社会的重要性! 本章我们便来学习一些网络基础知识,如果感兴趣的读者可以

    2024年02月10日
    浏览(46)
  • 一、网络编程之基础知识详解

    引言: 初学网络编程时会涉及到许多网络基础知识,这些知识点比较零碎,本文希望系统总结一次,以便在后续的学习和工作中能够快速查阅。 网络分层模型 OSI 七层模型 OSI 模型,也叫做七层模型, OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。 OSI 模型是

    2024年02月09日
    浏览(58)
  • 网络编程——端口

    TCP/IP 协议采用端口标识通信的进程 用于区分一个系统里的多个进程 1、对于同一个端口,在本同系统中对应着不同的进程 2、对于同一个系统,一个端口只能被一个进程拥有 3、一个进程拥有一个端口后,传输层送到该端口的数据全部被该进程接收,同样,进程送交传输层的

    2024年02月14日
    浏览(45)
  • 《Java SE》网络编程基础知识归纳。

    目录 一、网络基本介绍 1、什么是网络通信? 2、网络 3、IP地址 4、域名 5、网络通信协议 6、Socket 二、TCP网络通信编程  1、应用实例1(字节流) 2、应用实例2(字节流) 3、应用实例3(字符流) 4、netstat 指令 三、UDP网络通信编程  1、基本介绍 2、基本流程 3、应用实例  

    2024年01月20日
    浏览(54)
  • 由浅入深Netty基础知识NIO网络编程

    阻塞模式下,相关方法都会导致线程暂停 ServerSocketChannel.accept 会在没有连接建立时让线程暂停 SocketChannel.read 会在没有数据可读时让线程暂停 阻塞的表现其实就是线程暂停了,暂停期间不会占用 cpu,但线程相当于闲置 单线程下,阻塞方法之间相互影响,几乎不能正常工作,

    2024年02月05日
    浏览(55)
  • C/C++网络编程基础知识超详细讲解第二部分(系统性学习day12)

                懒大王感谢大家的关注和三连支持~       目录 前言 一、UDP编程 UDP特点:  UDP框架: UDP函数学习   发送端代码案例如下: 二、多路复用  前提讲述 select  poll 三、图解如下  总结         作者简介:  懒大王敲代码,正在学习嵌入式方向有关课程stm32,网络

    2024年02月07日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包