学习了 AF_XDP 后,一时手痒弄了个 ping-latency-injector
。
ping-latency-injector
它可以用来混淆使用 ping 实现的网络距离探测;比如注入 100ms 后,ping 得到的延时就会增加 100ms。
所以,对于面向公网的网关而言,不想关闭 ping、又不想别人 ping 真实的网络距离,就可以用上该工具注入指定延时。而计算真实真实延时,可以用 ping 延时减去指定延时。
小巧又有趣的工具。
# git clone git@github.com:Asphaltt/ping-latency-injector.git
# cd ping-latency-injector
# go generate && go build
# ./ping-latency-injector -h
Usage of ./ping-latency-injector:
-D, --dev string device to inject latency to ping
-L, --lat string latency to delay, 1ms <= latency <= 10s (default "1ms")
pflag: help requested
# ./ping-latency-injector -D enp0s8 -L 600ms
2023/03/12 16:01:37 Attached XDP to enp0s8
# echo 在另一台主机上 ping
# ping -s 1400 -c3 192.168.1.138
PING 192.168.1.138 (192.168.1.138): 1400 data bytes
1408 bytes from 192.168.1.138: icmp_seq=0 ttl=64 time=601.807 ms
1408 bytes from 192.168.1.138: icmp_seq=1 ttl=64 time=600.700 ms
1408 bytes from 192.168.1.138: icmp_seq=2 ttl=64 time=601.272 ms
--- 192.168.1.138 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 600.700/601.260/601.807/0.452 ms
没错,ping-latency-injector
由 XDP、AF_XDP 和用户态应用程序 3 部分组成。
详细源代码请查看 GitHub ping-latency-injector[1]。
这是一个 AF_XDP 练手工具。
方便后面深挖 AF_XDP 的内核源代码。
GitHub ping-latency-injector: https://github.com/Asphaltt/ping-latency-injector