Python 从 docker 容器 Ping IPv4 和 IPv6

问题描述 投票:0回答:1

我正在尝试从 Docker 容器内部 ping IPv4 和 IPv6 地址。

我已经尝试过使用

ping3
,但不支持IPv6

>>> from ping3 import ping
>>> v4 = ping("142.250.185.110")
>>> v6 = ping("2a00:1450:4001:831::200e")
>>> print(v4)
0.003611326217651367
>>> print(v6)
False

我还尝试使用

multiping
,它返回无效 IP 地址的响应时间(例如,来自我的 docker 容器内的
1.2.3.4

mp = MultiPing([server_address]) mp.send() responses, no_responses = mp.receive(timeout) print(server_address + " " + str(responses)) # 1.2.3.5 {'1.2.3.5': 0.004548549652099609} # 1.2.3.4 {'1.2.3.4': 0.004738330841064453}
是否有一种良好且可靠的方法来 ping IPv4 和 IPv6 地址(包括响应时间)?

python docker ping
1个回答
0
投票
我找到了一种使用

scapy

 手动 ping 的方法

from scapy.all import sr1, IP, ICMP, IPv6, ICMPv6EchoRequest, conf def _ping_v4(address: str, timeout: int = 5) -> float: packet = IP(dst=address) / ICMP() start_time = time.time() response = sr1(packet, timeout=timeout, verbose=0) if response is None: return -1.0 return (time.time() - start_time) * 1000 def _ping_v6(address: str, timeout: int = 5) -> float: packet = IPv6(dst=address) / ICMPv6EchoRequest() start_time = time.time() response = sr1(packet, timeout=timeout, verbose=0) if response is None: return -1.0 return (time.time() - start_time) * 1000
    
© www.soinside.com 2019 - 2024. All rights reserved.