0%

Linux paping 工具

背景

​ 最近正在风风火火的弄混沌工程😂,在弄到网络延迟、丢包的故障注入时,需要进行故障验证。如果仅仅是网卡层面的话,直接通过 ping 的方式即可,但现在需要的是知道具体某个 IP + PORT 的延迟。

​ 还好在这百试不厌的GOOGLE下,找到了一个小众工具 一一 paping,比较好的解决了我的问题,下面先配一个效果图。

paping_linux.jpg

安装步骤

1
2
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/paping/paping_1.5.5_x86_linux.tar.gz
tar -zvxf paping_1.5.5_x86_linux.tar.gz

使用中遇到的问题

在首次安装完后,执行命令 ./paping -p 80 -c 5 www.baidu.com 一般都会报错(至少我在两台虚拟机上安装都遇到过如下问题┑( ̄。。 ̄)┍ )。

问题一:/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

原因:因为虚拟机操作系统是64位的,但该工具中属于32位程序。
解决方法:yum install -y glibc.i686

问题二:libstdc++.so.6: cannot open shared object file: No such file or directory

参考链接:libstdc++.so.6: cannot open shared object file: No such file or directory

1
2
3
4
5
# 因为我的操作系统都是Red hat,所以执行如下命令
sudo yum install libstdc++.i686
sudo yum install libstdc++-devel.i686

# 但是在执行上述的第一条命令时,会触发问题三

问题三:执行 yum install libstdc++.i686 报错

具体报错信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Error:  Multilib version problems found. This often means that the root
cause is something else and multilib version checking is just
pointing out that there is a problem. Eg.:

1. You have an upgrade for libstdc++ which is missing some
dependency that another package requires. Yum is trying to
solve this by installing an older version of libstdc++ of the
different architecture. If you exclude the bad architecture
yum will tell you what the root cause is (which package
requires what). You can try redoing the upgrade with
--exclude libstdc++.otherarch ... this should give you an error
message showing the root cause of the problem.

2. You have multiple architectures of libstdc++ installed, but
yum can only see an upgrade for one of those architectures.
If you don't want/need both architectures anymore then you
can remove the one with the missing update and everything
will work.

3. You have duplicate versions of libstdc++ installed already.
You can use "yum check" to get yum show these errors.

...you can also use --setopt=protected_multilib=false to remove
this checking, however this is almost never the correct thing to
do as something else is very likely to go wrong (often causing
much more problems).

Protected multilib versions: libstdc++-4.8.5-44.el7.i686 != libstdc++-4.8.5-36.el7_6.2.x86_64

看起来一大堆报错信息一般挺吓人的(▔^▔) ,不过莫慌!实际只需要执行如下命令即可解决:

1
2
# 说白了就是安装依赖libsdc++版本不匹配
yum -y install libstdc++

执行完上述命令后,再执行问题二中的两条命令即可,至此就可以愉快的使用 paping 工具了。

使用方式

在linux上使用 paping 工具方式很简单。

1
2
3
4
5
6
7
8
Syntax: paping [options] destination

Options:
-?, --help display usage
-p, --port N set TCP port N (required) // 指定被测试服务的TCP端口(必须)
--nocolor Disable color output // 屏蔽彩色输出
-t, --timeout timeout in milliseconds (default 1000) // 指定超时时长,单位为毫秒,默认为1000
-c, --count N set number of checks to N // 指定测试次

配合ChaosBlade工具故障注入验证

1
2
3
4
5
# 本机访问外部 180.101.49.12 机器(ping www.baidu.com 获取到的 IP)80 端口延迟 200ms 
blade create network delay --time 200 --interface eth0 --remote-port 80 --destination-ip 180.101.49.12

# 使用paping 工具来查看指定端口的延时,可以发现指定外部的机器的延迟真实增加了200ms
./paping -p 80 -c 5000 180.101.49.12

⚠️ 注意:如果是超过3秒,则会一直显示connect time out

paping-linux-2.jpg
1
2
3
4
5
# 访问本机 8080 端口延迟 200ms,延迟时间上下浮动 200ms
blade create network delay --time 200 --offset 200 --interface lo --local-port 8080

# 使用paping 工具来查看指定端口的延时
./paping -p 8080 -c 5000 127.0.0.1

⚠️ 在本机验证本机的延迟, 原因是在本地验证本地不是走eth0的网口,而是走lo网口,通过如下方式可以在本地验证

paping-linux-3.jpg
------------- 本 文 结 束 感 谢 您 的 阅 读 -------------