tcpdump啓動腳本

    最近幾月公司接了上海電信新的項目「智慧社區」,此項目中個人角色是FAE,負責項目的現場實施、部署方案、升級方案、運維和客服。電信各部門的接口人每次看見個人口頭禪就是「有事找XX」,XX固然就是個人名字啦。呵呵,很無奈吧,這麼多事對方都是一個個部門的接口人,到我這就是一我的了。前端

    拋磚引玉就寫到這了,言歸正傳,開始描述孵化出此腳本的過程。sql

    最近幾日,研發發現程序調用電信給出的一個http認證接口小几率的會發生失敗。而後查程序也查不出個因此然來,就發郵件給電信網工。電信網工回覆的郵件內容大體歸納爲「不是隻有你一家程序在調用咱們接口,咱們查過日誌了,沒有問題。請檢查或重啓大家本身的程序。」bash

    這下研發着急了,業務平臺啊,不是隨隨便便就能重啓的。緊接着就是懷疑本機系統啊、網絡啊,是否是這方面的問題形成的(作運維的兄弟們你們內心都明白,這是研發的通病,不會認可是本身開發的程序有問題,呵呵)。服務器

    在此情景下,郵件天然而然的就到我這了咯。我把來龍去脈看了遍,想了一個比較可行的方法,讓tcpdump去驗證吧。沒辦法,本人責任心比較重。網絡

    tcpdump默認是在前端顯示的,爲了實現自動化運維,確定得本身寫腳本了。運維

    羅嗦了半天,各位看官請見諒,如下就是整個腳本的所有內容:tcp

  
  
  
  
  1. #!/bin/bash 
  2. #tcpdump_port.sh 
  3. #author zhangyu 
  4.  
  5. # Source function library. 
  6. . /etc/rc.d/init.d/functions 
  7.  
  8. DATE=`date +%F` 
  9. PIDFILE=/tmp/tcpdump.pid 
  10. LOGPATH=/root/tcpdump 
  11. LOCALHOST=192.168.2.40 
  12. REMOTEHOST=www.baidu.com
  13. PORT=80 
  14.  
  15. start() { 
  16.     if [ -f $PIDFILE ]; then 
  17.         { 
  18.             PID=`sed '1d' $PIDFILE` 
  19.             echo "Tcpdump (pid $PID) is running ..." 
  20.         } 
  21.     else 
  22.         { 
  23.             nohup tcpdump -e -f -nn -vvv -xx host $LOCALHOST and $REMOTEHOST and tcp port $PORT -w "$LOGPATH/$DATE.pcap" & 
  24.             ps -ef |grep tcpdump|grep -v grep|awk '{print $2}' >$PIDFILE 
  25.             echo -e "Tcpdump start                      [ \033[32;49;1mok\033[39;49;0m ]" 
  26.         } 
  27.     fi 
  28.  
  29. stop() { 
  30.     if [ -f $PIDFILE ]; then 
  31.         { 
  32.             PID=`sed '1d' $PIDFILE` 
  33.             kill -2 $PID 
  34.             rm -rf $PIDFILE 
  35.             echo -e "Tcpdump stop                       [ \033[32;49;1mok\033[39;49;0m ]" 
  36.         } 
  37.     else 
  38.         { 
  39.             echo "Tcpdump is stopped" 
  40.         } 
  41.     fi 
  42.  
  43. status() { 
  44.     if [ -f $PIDFILE ]; then 
  45.         { 
  46.             PID=`sed '1d' $PIDFILE` 
  47.             echo "Tcpdump (pid $PID) is running ..." 
  48.         } 
  49.     else 
  50.         { 
  51.             echo "Tcpdump is stopped" 
  52.         } 
  53.     fi 
  54.  
  55. case "$1" in 
  56.     start) 
  57.         start 
  58.         ;; 
  59.     stop) 
  60.         stop 
  61.         ;; 
  62.     restart) 
  63.         stop 
  64.         start 
  65.         ;; 
  66.     status) 
  67.         status 
  68.         ;; 
  69.     *) 
  70.         echo "Usage:$0 {start|stop|restart|status}" 
  71.         ;; 
  72. esac 
    代碼中LOCALHOST、REMOTEHOST和PORT三者的變量值我都修改過了,公網實際在跑的服務器確定不是這樣的啦,你懂的!
 
    腳本執行的目前簡單說一下,當192.168.2.40主機向www.baidu.com:80請求時,會生成TCP的交互記錄,並生成日誌保存在/root/tcpdump/目錄下。附個圖,你們看的更明白些。

至於tcpdump是幹什麼的,怎麼用,還請自行百度、google、51CTO都行,不過最好的幫助但是man tcpdump哦。
 
    最後在crontab裏作個計劃任務,天天凌晨restart一下腳本,自動化運維完成了。至因而不是把腳本加入rc.local啊、/etc/init.d/下啊,暫時先不考慮。
 
    腳本雖然不復雜,就那麼幾行代碼,可是嚴謹的態度必定要有,沒有N次的測試和優化,我是絕對不會把它放入公網正在運行的服務器中的,但願藉此文能激勵下作研發的兄弟們。
 
    但願是美好的,現實是……
 
PS:本文技術部分若有錯誤,還望高人路過指點一二,萬分感謝!
相關文章
相關標籤/搜索