每周一个 Python 模块 | ipaddress

每周一个 Python 模块 | ipaddress,第1张

ipaddress 模块包括用于处理 IPv4 和 IPv6 网络地址的类。这些类支持验证,查找网络上的地址和主机以及其他常见 *** 作。

最基本的对象代表网络地址本身。传递字符串,整数或字节序列给 ip_address() 来构造地址。返回值是 IPv4Address 或 IPv6Address 实例,具体取决于所使用的地址类型。

还可以用这个方法来校验 IP 地址是否合法:

网络是由一系列地址组成的,通常用地址和掩码这种形式来表示。

与地址一样,IPv4 和 IPv6网络有两种网络类。每个类提供用于访问与网络相关联的值的属性或方法,例如广播地址和可供主机使用的网络上的地址。

网络实例是可迭代的,并产生网络上的地址。

此示例仅打印一些地址,因为 IPv6 网络可以包含的地址远多于输出中的地址。

迭代网络会产生地址,但并非所有地址都对主机有效。例如,网络的基地址和广播地址。要查找网络上常规主机可以使用的地址,请使用 hosts() 方法,该方法会生成一个生成器。

将此示例的输出与前一示例进行比较表明,主机地址不包括在整个网络上进行迭代时生成的第一个值。

除了迭代器协议之外,网络还支持 in *** 作,来确定地址是否是网络的一部分。

in 使用网络掩码来测试地址,因此它比扩展网络上的完整地址列表更有效。

网络接口表示网络上的特定地址,并且可以由主机地址和网络前缀或网络掩码表示。

接口对象具有分别访问完整网络和地址的属性,以及表达接口和网络掩码的几种不同方式。

相关文档:

>

实验拓扑如下,linux向R2发送IP分片,并在R2接口上抓包。

  ICMP包校验和是连通头部信息加数据本身一起进行校验(ip包只需要校验头部信息)而Scapy自动添加ICMP校验和时只会计算第一分片的数据,当三个分片到达目标主机进行重组后校验不通过,将重组后的数据包丢弃;因此在手动设置IP分片时,需要手动将校验和添加入ICMP首部中。

由于手动计算校验和过程较复杂,可通过wireshark抓包,可以获取到正确的校验和。

抓包结果如下,由于单个数据包长度超过MTU,系统自动将ICMP request包分片发送,同样的ICMP reply系统也进行了分片。

  当主机发送分组的长度超过MTU又不可以分片(IP flags位DF置1),则这个分组丢弃,并用ICMP差错报文向主机报告。

参考:( >

import socket

hostname = socketgethostname()  

ip = socketgethostbyname(hostname)

print ip

这就是本机的IP地址

以上就是关于每周一个 Python 模块 | ipaddress全部的内容,包括:每周一个 Python 模块 | ipaddress、python怎样获取连接的IP的设备信息、Python网络编程4--实现IP分片与网络路径MTU探测等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9694199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存