最近,需要將wireshark監聽的數據進行提取,分兩步:首先,應該得出wireshark的數據包吧,在圖形化界面中可以非常直觀的將監聽數據進行存儲,但是這樣需要手動操作非常麻煩,而且容易出錯(隨着處理數據包的數量增加,圖形化可能吃不消,以前就遇見過),在linux下,采用了tshark命令,tshark就是wireshark圖形界面命令行化,命令如下:
sudo tshark -f "udp port 1243" -i eth0 (-w)> /tmp/capture.cap
對上面的命令進行解釋:"udp port 1243",雙引號內的東西就是對需要監聽的內容進行一個篩選,也就是端口號為1243的udp數據包,-i后面就是需要監聽的接口,接口后面的(-w)和(>)兩個選項,表示需要存儲文件的格式,-w存儲的可能是二進制文件,例如,使用-w的話,那么這行命令執行以后capture.cap就是二進制的文件,那么使用>以后,則保存的文本文件,當然,現在需要的是純文本文件,最后則是文件需要保存的路徑以及名稱。
第一步完成以后,則需要從數據中提取出來需要的數據,比如時間,源、目的地址等有用信息,我們采用如下命令:
sudo cat /tmp/capture.cap | awk'{print $1"\t" $2"\t" $3}' > /tmp/capture.txt
此時cat的任務就是將需要被提取的文件展現出來,通過管道,將輸出內容作為awk命令的輸入,awk是一個非常好的數據處理工具。具體見鳥哥的私房菜基礎篇363頁!,同樣的輸出為純文本格式文件capture.txt,完成了上述的工作,我想放入同一個腳本就能非常輕松的調用而且不用出錯,將上述兩行命令輸入一個腳本中,但是我發現無法出來capture.txt文件,后來發現自己SB了,腳本是一行一行執行,第一行是一直執行的,根本執行不到第二行來,后來在第一行后面加上&,讓其進行后台運行,capture.txt,倒是可以出來但是內容為空白,因為該文件僅僅在上面文件創建了就開始抓取自己的內容,當然什么也沒有。
后來我想,我要的只是最后經過調整的數據,不需要中間數據啊,為什么不直接一條命令進行提取不就完了,於是將兩個命令融合如下:
sudo tshark -f "udp port 1243" -i eth0 |awk '{print $1 "\t" $2 "\t" $3}' > /tmp/capture.txt