1 个不稳定版本

0.1.0 2024年7月15日

#887网络编程

Download history 73/week @ 2024-07-09 44/week @ 2024-07-16 2/week @ 2024-07-23 6/week @ 2024-07-30

每月125 次下载

MIT 许可证

155KB
3.5K SLoC

xping

Rust

命令行ping的再想象。发送ICMP回显请求并测量到目标主机的往返时间,带有各种功能。

用法

Command line ping, re-imagined.

Usage: xping [OPTIONS] <TARGET>...

Arguments:
  <TARGET>...  Address or name of target host

Options:
  -r, --rate <RATE>          Number of packets per second
  -i, --interval <INTERVAL>  Packet interval in milliseconds [default: 1000]
  -c, --count <COUNT>        Number of attempts (default infinite)
  -w, --timeout <TIMEOUT>    Timeout waiting for response in milliseconds [default: 1000]
  -l, --length <LENGTH>      Length of ICMP payload in bytes [default: 64]
  -d, --display <DISPLAY>    Display mode [default: classic] [possible values: classic, char, dumb, char-graph, debug, plot, none, influx]
  -t, --ttl <TTL>            Time to live [default: 64]
      --api <API>            [default: icmp-socket] [possible values: icmp-socket]
  -4, --ipv4                 Force using IPv4
  -6, --ipv6                 Force using IPv6
  -a, --all                  Target all resolved addresses
      --summary <SUMMARY>    [default: text] [possible values: text, json, csv, none]
  -h, --help                 Print help (see more with '--help')
  -V, --version              Print version

与经典ping的不同之处

  • 在等待响应或超时期间继续发送回显请求而不阻塞
  • 允许以非常高的数据包速率发送(每秒数千个数据包,请谨慎使用)
  • 显示发送的数据包并异步更新接收到的数据包的显示
  • 具有多种显示模式(--display 选项)
    • 经典模式(默认):类似于经典ping(但具有异步更新)
    • 字符模式:为每个探测显示一个字符,在接收或超时后更新
    • 调试:显示所有内部数据
  • 无需root或管理员权限

功能

  • 支持IPv4和IPv6
  • 可配置数据包速率、长度和TTL
  • 支持Windows和Linux,具有多个API(--api=...
    • Windows:IP Helper API(iphelper,默认)和原始ICMP套接字(icmp-socket
    • Linux:ICMP套接字(icmp-socket
  • Linux上的IP_RECVERR支持(用于详细错误消息)
  • 数据包丢失统计(类似于经典ping)
  • 显示延迟统计(最小值、最大值、平均值)
  • ping多个目标
  • Linux上的OS时间戳(SO_TIMESTAMP)

缺失的功能和想法

  • 延迟图
  • 在Windows上支持超过64个未完成的请求数据包(目前由WaitForMultipleObjects限制)
  • 显示接收TTL
  • 水平滚动显示
  • IPv4路由记录
  • IPv4时间戳

限制

  • Windows上不支持OS时间戳。延迟完全在用户空间中测量。
    • 不支持SO_TIMESTAMP
    • 不支持SIO_TIMESTAMPING与SOCK_RAW/IPPROTO_ICMP套接字

依赖项

~5–44MB
~680K SLoC