curl+tcpdump抓包脚本一例-阿里云开发者社区

开发者社区> 阿里云支持与服务> 正文

curl+tcpdump抓包脚本一例

简介: 使用脚本访问网站获取http状态码,抓包排查问题

背景信息:

    某网站访问偶发性连接失败,时间点不一样,且不易复现,遂弄个脚本测试,如下
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一个短信接口,触发短信通知就更美妙了

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

分享阿里云支持与服务团队最佳实践、经典案例与故障排查。

官方博客
文档