閱讀386 返回首頁    go 阿裏雲 go 技術社區[雲棲]


curl+tcpdump抓包腳本一例

背景信息:
某網站訪問偶發性連接失敗,時間點不一樣,且不易複現,遂弄個腳本測試,如下

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一個短信接口,觸發短信通知就更美妙了

最後更新:2017-09-18 19:33:09

  上一篇:go  三十分鍾熟悉es6(es6常用功能總結)
  下一篇:go  小白用戶如何輕鬆上雲 -我的輕量應用服務器探索記