首页 > 编程语言 >ipaddress:Python中网络地址的处理

ipaddress:Python中网络地址的处理

时间:2023-09-19 09:13:11浏览次数:41  
标签:Python ip 地址 网络地址 address print net ipaddress

前言

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)

运行之后,效果如下:

标签:Python,ip,地址,网络地址,address,print,net,ipaddress
From: https://www.cnblogs.com/arena/p/17713699.html

相关文章

  • python request请求数据
    pythonrequest请求数据#-*-coding:utf-8-*-importrequestsimportjson#查询塔吊X数据defsearchTowerXValue():towerXValue=0.0try:#从服务器请求数据response=requests.get('https://www.baidu.com:8087/sX')#检查响应......
  • Python变量:创建、类型、命名规则和作用域详解
    变量变量是用于存储数据值的容器。创建变量Python没有用于声明变量的命令。变量在您第一次为其分配值时被创建。示例x=5y="John"print(x)print(y)变量不需要声明为特定类型,并且甚至在设置后可以更改类型。示例x=4#x的类型为intx="Sally"#现在x的......
  • python05
    8.条件语句if条件: 条件之后的语句else:条件不成立之后的代码注意:统一缩进问题(四个空格=tab)num=input("请输入数字:")ifint(num)>10:print("猜错了")else:print("猜对了")8.2多条件语句if条件A:A成立,执行此缩进的所有代码elif条件B:B......
  • Python基础之装饰器
    目录1装饰器1.1定义1.2使用示例1.2.1使用类中实例装饰器1.2.2使用类方法装饰器1.2.3使用类中静态装饰器1.2.4使用类中普通装饰器1.3内部装饰器1.3.1@property2常用装饰器2.1@timer:测量执行时间2.2@memoize:缓存结果2.3@validate_input:数据验证2.4@log_results:日......
  • 1:疯狂python讲义
    一:用户输入一个字符串和一个子串,程序打印出子串在字符串中出现的次数(从左到右),例如给定'abcdcdc'和'cdc',cdc出现2次a,b=input('请输入字符串:'),input('请输入字符子串:')a_len=len(a)b_len=len(b)count=0foriinrange(a_len):ifa[i:i+b_len]==b:count+=1print(......
  • Python中捕获异常的方法及异常处理try-except-else-finally的区别
    在Python中,try、except、else和finally是我们常用的异常处理方式,有一个清晰的执行顺序很重要。在这篇攻略中,我们将详细探讨这些关键字的执行顺序,以便更有效地处理异常。先回顾一下这些关键字的含义和用途:try:执行可能会抛出异常的代码块;except:当try代码块中出现了异常,执行此代......
  • 【小沐学NLP】Python使用NLTK库的入门教程
    1、简介NLTK-自然语言工具包-是一套开源Python。支持自然研究和开发的模块、数据集和教程语言处理。NLTK需要Python版本3.7、3.8、3.9、3.10或3.11。NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。它提供了易于使用的接口,通过这些接口可以访问超过50个......
  • Python3 ACM模式的输入输出处理
    python3ACM模式的输入输出例子教学_amc模式python读取输入_汀、人工智能的博客-CSDN博客Python的输入是字符串,所以要自己转类型strip去掉左右两端的空白符,返回strslipt把字符串按空白符拆开,返回[str]map把list里面的值映射到指定类型,返回[type]EOF用抓异常print后面加逗号......
  • Python常用魔术方法汇总(20个魔法函数)
    本文将为您详细介绍Python中的让我们一起来了解这些特殊的函数,并提供一些在实际接口自动化工作中的示例代码。魔法函数(MagicMethods),也被称为特殊方法或双下划线方法,是Python中一些特殊命名的函数,它们以双下划线开头和结尾。这些函数定义了对象在特定情况下的行为,例如创建、比较、......
  • Python成员方法、类方法与静态方法的区别
    Python基础教程:3个方面理解Python的类方法与静态方法在Python语言中有如下3种方法:成员方法类方法(classmethod)静态方法(staticmethod)可能很多同学不清楚这3种方法,尤其是后两类方法到底有什么不同。为此,本文将对这3种方法做一次敲骨沥髓的深度剖析。先说一下这3种方法的差异,......