Python ICMP 诊断库 icmplib
ICMPLIB
icmplib 是 Python 中 ICMP 协议的全新现代实现。
特征
- 🌳即用型: icmplib 提供即用型函数,例如最受欢迎的函数:ping、multiping和traceroute。详尽的文档也可以帮助您入门。
- 💎现代:这个库使用 Python 3.7+ 提供的最新机制,并且完全面向对象。
- 🚀快速:每个类和函数都经过精心设计和优化,以提供最佳性能。一些函数也是异步的,如async_ping和async_multiping函数。您可以在几秒钟内 ping 遍世界!
- ⚡强大:无需 root 权限即可使用该库,设置 ICMP 数据包的流量类,自定义其有效负载,发送广播请求等等!
- 🔩 Evolutive:ICMPv4使用和套接字轻松构建您自己的类和函数ICMPv6。
- 🔥 IPv6 无缝集成:使用 IPv6 的方式与使用 IPv4 的方式相同。
- 🍺跨平台:针对 Linux、macOS 和 Windows 进行了优化。该库会自动管理每个系统的特性。
- 🤘无依赖: icmplib 是 ICMP 协议的纯 Python 实现。它不依赖任何外部依赖。
安装
- 安装 icmplib
安装 icmplib 的推荐方法是使用pip3:
$ pip3 install icmplib
- 导入基本功能
from icmplib import ping, multiping, traceroute, resolve
- 导入异步函数
from icmplib import async_ping, async_multiping, async_resolve
- 导入套接字(高级)
from icmplib import ICMPv4Socket, ICMPv6Socket, AsyncSocket, ICMPRequest, ICMPReply
- 导入例外
from icmplib import ICMPLibError, NameLookupError, ICMPSocketError
from icmplib import SocketAddressError, SocketPermissionError
from icmplib import SocketUnavailableError, SocketBroadcastError, TimeoutExceeded
from icmplib import ICMPError, DestinationUnreachable, TimeExceeded
功能
ping
ping(address, count=4, interval=1, timeout=2, id=None, source=None, family=None, privileged=True, **kwargs)
路由追踪 - traceroute
确定到目标主机的路由。
互联网是一个庞大而复杂的网络硬件集合,通过网关连接在一起。跟踪数据包所遵循的路由可能很困难。此功能使用 IP 协议生存时间字段,并尝试从通往某个主机的路径上的每个网关引出 ICMP 超时响应。
该功能需要root权限才能运行。
traceroute(address, count=2, interval=0.05, timeout=2, first_hop=1, max_hops=30, fast=False, id=None, source=None, family=None, **kwargs)
异步 ping
>>> import asyncio
>>> from icmplib import async_ping
>>> async def is_alive(address):
... host = await async_ping(address, count=10, interval=0.2)
... return host.is_alive
>>> asyncio.run(is_alive('1.1.1.1'))
True
>>> import asyncio
>>> from icmplib import async_multiping
>>> async def are_alive(*addresses):
... hosts = await async_multiping(addresses)
...
... for host in hosts:
... if not host.is_alive:
... return False
...
... return True
>>> asyncio.run(are_alive('10.0.0.5', '127.0.0.1', '::1'))
False