暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ping 命令加时间戳

生有可恋 2024-02-19
4189

ping 命令默认是不带时间戳的,当丢包时无法通过 ping 记录来追溯断网的时间点。

比如:

    bash$ ping -t baidu.com


    Pinging baidu.com [39.156.66.10] with 32 bytes of data:
    Reply from 39.156.66.10: bytes=32 time=32ms TTL=45
    Reply from 39.156.66.10: bytes=32 time=32ms TTL=45
    Reply from 39.156.66.10: bytes=32 time=31ms TTL=45
    General failure.
    General failure.
    General failure.
    Reply from 39.156.66.10: bytes=32 time=31ms TTL=45
    Reply from 39.156.66.10: bytes=32 time=31ms TTL=45
    Reply from 39.156.66.10: bytes=32 time=31ms TTL=45
    General failure.
    Reply from 39.156.66.10: bytes=32 time=32ms TTL=45
    Reply from 39.156.66.10: bytes=32 time=32ms TTL=45
    Reply from 39.156.66.10: bytes=32 time=32ms TTL=45
    General failure.
    General failure.
    General failure.
    General failure.
    General failure.


    如果能在 ping 的输出记录前加上时间戳,则可以通过日志来跟踪网络质量发生变动的时间点。处理的思路是通过管道将 ping 的输出获取后进行加工,在其前面加上时间戳后再输出,类似如下效果:

      bash$ ping -t baidu.com | python add_timestamp.py
      2024.02.15 20:50:05
      2024.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=49
      2024.02.15 20:50:10 Reply from 110.242.68.66: bytes=32 time=33ms TTL=49
      2024.02.15 20:50:11 Reply from 110.242.68.66: bytes=32 time=31ms TTL=49
      2024.02.15 20:50:12 Reply from 110.242.68.66: bytes=32 time=32ms TTL=49
      2024.02.15 20:50:13 Reply from 110.242.68.66: bytes=32 time=33ms TTL=49
      2024.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 datetime
        import sys


        def add_timestamp():
        f = sys.stdin
        while 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论