使用原始套接字的纯python icmp ping实现。
python-ping的Python项目详细描述
使用原始套接字的纯python ping实现。
注意,ICMP消息只能从以根用户身份运行的进程发送 (在Windows中,必须以“管理员”身份运行此脚本)。
的原始版本用法
~/python-ping$ sudo ./ping.py google.com PYTHON-PING google.com (209.85.148.99): 55 data bytes 64 bytes from google.com (209.85.148.99): icmp_seq=0 ttl=54 time=56.2 ms 64 bytes from google.com (209.85.148.99): icmp_seq=1 ttl=54 time=55.7 ms 64 bytes from google.com (209.85.148.99): icmp_seq=2 ttl=54 time=55.5 ms ----google.com PYTHON PING Statistics---- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip (ms) min/avg/max = 55.468/55.795/56.232
待办事项
- 重构ping.py
- 创建一个cli界面
- 使用输出解析器添加“supprocess ping”
贡献
修订历史
2011年9月12日
Jens Diemer的错误修复+清理 使用ubuntu+windows 7进行测试
2011年9月6日
Cleanup by Martin Falatic. 恢复丢失的评论和文档。改进的功能:恒定的时间间隔 pings,内部时间始终使用毫秒。澄清注释 (例如,在校验和程序中)。在IP&ICMP头中使用未签名数据 包装/拆箱,除非另有必要。信号处理。ping样式输出 格式化和统计。
2011年8月3日
由扎克·威尔移植到PY3K。主要由2to3完成;对 处理字节与字符串的变化(校验和中不再有ord(),因为 >;source_string<;实际上是字节,已将.encode()添加到中的数据 发送一个)。就这样。
2010年3月11日
Samuel Stauffer的变化: 将time.clock替换为默认的计时器,该计时器设置为 Windows上的time.clock和其他系统上的time.time。
2009年11月8日
由George Notaras修复, 报告人Chris Hallman:
改进了与gnu/linux系统的兼容性。
此版本中的更改:
重新使用time.time()而不是time.clock()。2007年实施 仅在Microsoft Windows下工作。在gnu/linux上失败。 time.clock()在the two OSes下的行为不同。
2007年5月30日
- 将套接字星号导入更改为普通导入
- 将time.time()替换为time.clock()
- 删除“return none”(或更改为“return”(仅限返回)
- 在checksum()中,将“str”重命名为“source_string”
2000年12月4日
将struct.pack()调用更改为将校验和和ID打包为 未签名的。感谢杰罗姆·波因奇瓦尔的修复。
1997年11月22日
最初的黑客。做的不多,但不是去猜测 我(或其他人)将来想要什么样的功能,我只有 把我现在需要的东西放进去。
1997年12月16日
由于某些原因,当 这是在Solaris 2 .x上运行的,但它的工作原理是正确的。 Linux x86。既然我不知道怎么了,我就把 字节总是然后做一个htons()。