tcpping软件参考开源工具

https://github.com/jwyllie83/tcpping

该软件通过libnet组包和发包,通过libpcap抓取返回的ACK或RST信息来计算tcp延迟和丢包。

./tcpping -h

./tcpping: invalid option -- 'h'

./tcpping: [-v] [-c count] [-p port] [-i interval] [-I interface] [-t ttl] [-S srcaddress] remote_host


如果设备上有多个网卡,数据发出是从网卡A发出,数据回来是经过网卡B回来,这种情况下,需要设置-I any。只针对linux系统有效。

但设置成any后,第一包结果出现 异常。如:

./tcpping -S 1.1.1.1 1.1.1.5 -p 22 -I any

TCP PING 1.1.1.5 (1.1.1.5:22)

SYN/ACK from 1.1.1.5: seq=1 ttl=63 time=1463296896.000s

SYN/ACK from 1.1.1.5: seq=2 ttl=63 time=43.474ms

SYN/ACK from 1.1.1.5: seq=3 ttl=63 time=45.411ms

SYN/ACK from 1.1.1.5: seq=4 ttl=63 time=45.780ms

SYN/ACK from 1.1.1.5: seq=5 ttl=63 time=43.381ms

SYN/ACK from 1.1.1.5: seq=6 ttl=63 time=43.429ms

SYN/ACK from 1.1.1.5: seq=7 ttl=63 time=45.549ms

SYN/ACK from 1.1.1.5: seq=8 ttl=63 time=43.241ms

^C

--- 1.1.1.5 TCP ping statistics ---

7 SYN packets transmitted, 8 SYN/ACKs and 0 RSTs received, -14.3% packet loss

round-trip min/avg/max = 43.241/182912128.000/1463296896.000 ms


出现这种情况,稍微改一下tcpping.c代码即可

/* Do some analysis on the returned packet... */

if (ms > 1000) {

units = "s";

ms /= 1000;

            //如果大于1000,认为异常,直接返回

return;

}


改进后效果为:

./tcpping -S 1.1.1.1 1.1.1.5 -p 22 -I any -c 5

TCP PING 1.1.1.5 (1.1.1.5:22)

SYN/ACK from 1.1.1.5: seq=1 ttl=63 time=43.492ms

SYN/ACK from 1.1.1.5: seq=2 ttl=63 time=43.469ms

SYN/ACK from 1.1.1.5: seq=3 ttl=63 time=45.379ms

SYN/ACK from 1.1.1.5: seq=4 ttl=63 time=43.549ms

SYN/ACK from 1.1.1.5: seq=5 ttl=63 time=43.409ms

SYN/ACK from 1.1.1.5: seq=6 ttl=63 time=43.494ms


--- 1.1.1.5 TCP ping statistics ---

6 SYN packets transmitted, 6 SYN/ACKs and 0 RSTs received, 0.0% packet loss

round-trip min/avg/max = 43.409/43.799/45.379 ms