Python中实现ipaddress网络地址的处理
作者:一天一篇Python库 发布时间:2023-12-04 16:43:38
前言
ipaddress库提供了处理IPv4与IPv6网络地址的类。这些类支持验证,查找网络上的地址和主机,以及其他常见的操作。
本篇,将详细介绍Python中ipaddress库的使用规则。(内容涉及很多计算机网络知识,如果不懂,可以参考书籍《计算机网络》)
地址
一般来说,我们使用ipaddress库是通过ip_address()函数构建一个地址对象。它会返回一个IPv4Address或IPv6Address实例。实例如下:
import ipaddress
import binascii
addresses = [
'121.63.3.59',
'2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b'
]
for ip in addresses:
address = ipaddress.ip_address(ip)
print("IP地址:", address)
print("IP Version:", address.version)
print("是否是专用地址:", address.is_private)
print("是否是公网地址:", address.is_global)
print("是否是多播地址:", address.is_multicast)
print("是否是环回地址:", address.is_loopback)
print("是否是link-local保留:", address.is_link_local)
print("判断地址是否未指定:", address.is_unspecified)
print("IP地址16进制:", binascii.hexlify(address.packed))
运行之后,效果如下:
网络
网络地址通常用一个基本地址和一个掩码表示,掩码指示地址的哪些部分表示网络,哪些部分表示该网络上的地址。可以显式的表示掩码,也可以使用一个前缀长度值来表示,示例如下:
import ipaddress
addresses = [
'192.168.1.0/24',
'2001:0db8:3c4d:0015::/64'
]
for n in addresses:
net = ipaddress.ip_network(n)
print("是否是专用地址:", net.is_private)
print("该网段的广播地址:", net.broadcast_address)
print("IP地址与子网掩码:", net.compressed)
print("掩码以二进制的格式展示:", net.with_netmask)
print("以主机掩码格式展示:", net.with_hostmask)
print("网络中的地址总数:", net.num_addresses)
print()
运行之后,效果如下:
涉及IP地址与子网掩码以及广播地址等知识,读者可以参考《计算机网络》。
打印网络地址有多少IP可用
在IPv4的网络地址中,我们一般将其分为A,B,C类,上面我们提供的192.168.1.0是一个C类地址。学过网络的应该一眼就可以看出来其主机地址有254个,基地址为192.168.1.0,而广播地址为192.168.1.255。整体是256个。
因为这是C类地址,数学稍微好点的肯定手到擒来,但是我给你一个IPv6或者IPv4的A类地址,能口算出来多少的恐怕很少吧,而ipaddress库可以直接遍历打印,示例如下:
import ipaddress
n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
for ip in zip(net):
print(ip)
运行之后,效果如下:
这里遍历迭代,列出了所有的地址。如果只列出可用的主机地址把zip(net)改为zip(net.hosts())即可(也就是去除了广播地址与基地址的其他地址)。
当然,如果你只是想确定一个地址是否在网络中,可以直接使用in进行判断。示例如下:
import ipaddress
n = '192.168.1.0/24'
net = ipaddress.ip_network(n)
ip=ipaddress.ip_address('192.168.1.233')
if ip in net:
print("在里面")
接口
网络接口表示网络上的一个特定地址,可以表示为一个主机地址和一个网络前缀或网络掩码。示例如下:
import ipaddress
addresses = [
'192.168.1.251/24',
'2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b/64'
]
for ip in addresses:
iface = ipaddress.ip_interface(ip)
print(iface)
print("网络地址:", iface.network)
print("ip地址:", iface.ip)
print("字符串表示形式:", iface.with_prefixlen)
print("二进制表示掩码:", iface.with_netmask)
print("主机掩码表示:", iface.with_hostmask)
运行之后,效果如下:
来源:https://liyuanjinglyj.blog.csdn.net/article/details/116846346


猜你喜欢
- open函数你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。语法:fil
- 步骤很简单,直接进入主题。第一步:创建一个python项目。解析器什么的自己选择,环境目录默认就好。第二步:下载scrapy,步骤file-
- 前言我们写好的gin项目想要部署在服务器上,我们应该怎么做呢,接下来我会详细的讲解一下部署教程。1.首先我们要有一台虚拟机,虚拟机上安装好g
- JavaScript 框架和库可以说是开源项目中最庞大也是最累的类目了,目前在github 上这一类的项目是最多的,并且几乎每隔一段时间就会
- 利用seek监控文件内容,并打印出变化内容:#/usr/bin/env python#-*- coding=utf-8 -*-pos = 0
- python 3.x版本print输出不换行的格式如下:print(x, end="")其中,end=&quo
- 前言Sphinx是一款支持多种编程语言的文档生成工具,在python项目开发过程中,可以帮助开发者根据需求生成相应的说明文档,拿今天我们就基
- Golang精编100题能力模型(测试)初级primary:熟悉基本语法,能够看懂代码的意图;在他人指导下能够完成用户故事的开发,编写的代码
- 题目:如何在python中实现整数的二进制循环移位?概述在python中,可以通过<<以及>>运算符实现二进制的左移
- 本博客可能没有那么规范,环境之类的配置。只是让你直接开始编程写python。至于各种配置网络上有多种方法。本文仅代表我的观点的一种方法。电脑
- MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条
- 这次要为我的python程序加上数据库,主要是实现从mysql中查询出数据并在页面上显示出来。首先是mysql的配置文件config.pyh
- PHP7.0正式版也出来了,今天编译安装了一下,写下安装步骤,我是在centos6.6 环境中编译的,下面是详细的安装步骤环境依赖yum i
- 本文实例讲述了python服务器与android客户端socket通信的方法。分享给大家供大家参考。具体实现方法如下:首先,服务器端使用py
- 本文实例为大家分享了抖音代码舞python制作代码,供大家参考,具体内容如下一、效果图二、转换代码from img import Image
- #coding=gbkfrom xml.dom import minidom,Nodeimport urllib2,re,osdef rea
- 今天来填坑, 昨天说playwright未必一定要使用pytest-playwright包。 它也可以和pyunit一起使用。那么今天,田辛
- 项目github地址:bitcarmanlee easy-algorithm-interview-and-practice1.Python中
- 如果我们在标识列中插入值,例如:insert member(id,username) values(10,'admin')
- 通过PyQt5实现设置一个小闹钟的功能,到了设置的时间后可以响起一段音乐来提醒。导入UI界面组件相关的模块from PyQt5.QtCore