ping 命令默认是不带时间戳的,当丢包时无法通过 ping 记录来追溯断网的时间点。
比如:
bash$ ping -t baidu.comPinging baidu.com [39.156.66.10] with 32 bytes of data:Reply from 39.156.66.10: bytes=32 time=32ms TTL=45Reply from 39.156.66.10: bytes=32 time=32ms TTL=45Reply from 39.156.66.10: bytes=32 time=31ms TTL=45General failure.General failure.General failure.Reply from 39.156.66.10: bytes=32 time=31ms TTL=45Reply from 39.156.66.10: bytes=32 time=31ms TTL=45Reply from 39.156.66.10: bytes=32 time=31ms TTL=45General failure.Reply from 39.156.66.10: bytes=32 time=32ms TTL=45Reply from 39.156.66.10: bytes=32 time=32ms TTL=45Reply from 39.156.66.10: bytes=32 time=32ms TTL=45General failure.General failure.General failure.General failure.General failure.
如果能在 ping 的输出记录前加上时间戳,则可以通过日志来跟踪网络质量发生变动的时间点。处理的思路是通过管道将 ping 的输出获取后进行加工,在其前面加上时间戳后再输出,类似如下效果:
bash$ ping -t baidu.com | python add_timestamp.py2024.02.15 20:50:052024.02.15 20:50:05 Pinging baidu.com [110.242.68.66] with 32 bytes of data:2024.02.15 20:50:05 General failure.2024.02.15 20:50:06 General failure.2024.02.15 20:50:07 General failure.2024.02.15 20:50:08 General failure.2024.02.15 20:50:09 Reply from 110.242.68.66: bytes=32 time=32ms TTL=492024.02.15 20:50:10 Reply from 110.242.68.66: bytes=32 time=33ms TTL=492024.02.15 20:50:11 Reply from 110.242.68.66: bytes=32 time=31ms TTL=492024.02.15 20:50:12 Reply from 110.242.68.66: bytes=32 time=32ms TTL=492024.02.15 20:50:13 Reply from 110.242.68.66: bytes=32 time=33ms TTL=492024.02.15 20:50:14 General failure.2024.02.15 20:50:15 General failure.2024.02.15 20:50:16 General failure.

添加时间戳的 python 脚本代码如下:
import datetimeimport sysdef add_timestamp():f = sys.stdinwhile True:line = f.readline().strip()timestamp = datetime.datetime.now().strftime("%Y.%m.%d %H:%M:%S")print(f'{timestamp}\t{line}', flush=True)if __name__ == "__main__":try:add_timestamp()except:pass
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。
文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




