背景信息:
某网站访问偶发性连接失败,时间点不一样,且不易复现,遂弄个脚本测试,如下
1. #!/bin/bash
2. tcpdump -i any host www.aliyun.com and port 80 -s0 -G 60 -Z root -w %Y%m%d-%H%M%S.pcap &
3. while true;
4. do
5. code=$(curl --connect-timeout 5 -sL -w "%{http_code}" -X POST "www.aliyun.com" -o /dev/null)
6. now=$(date "+%Y-%m-%d %H:%M:%S")
7. echo $code $now >> ./result.txt
8. dumppid=$(ps -ef|grep "tcpdump -i any"|grep pcap|awk '{print $2}')
9. if [[ $code -ne 200 ]];then
10. sleep 5s;
11. kill -9 $dumppid
12. break
13. fi
14. sleep 60s;
15. done
注释:
1, #!/bin/bash是指此脚本使用/bin/bash来解释执行
2,tcpdump抓包,这里的host写的域名,大多数场景可以写ip+端口,且60秒转储一次抓包文件
5,设置code的变量,$()等同于``,优先执行的意思,里面的curl大概是设置5秒超时,只获取code,方法是使用POST ,
6,获取当前时间,精确到秒
7,将http_code以及时间写入当前目录的result.txt
8,获取tcpdump的pid,以备后面抓到后kill掉
9,判断code是否不等于200,
10,不等于200的话sleep 5s,
11,kill掉tcpdump进程,
12,结束这个循环
在server端抓包
tcpdump -i any host clientip and port 80 -s0 -G 60 -Z root -w %Y%m%d-%H%M%S.pcap &
server端抓client ip的请求80的包,每60秒转储一个文件
备注:
磁盘要备有充分的空间,以免空间满导致异常
扩展:
判断code不等200的时候,可以去curl一个短信接口,触发短信通知就更美妙了