使用過mysql等資料庫的話,一定會對資料庫強大的過濾以及搜索功能印象深刻。面對離線的數據包文,很多時候需要批量的提取某些信息,批量的查詢某些信息,批量的修改一些信息,批量的刪除一些信息。我是經常將單個的pcap報文和mysql中的表概念對應起來的。因為在使用wireshark進行展示的時候,每一片報文就像數據表的一行一樣,顯示著這個數據包的屬性信息。這個屬性信息要比絕大多數的數據表要豐富,因為wireshark提供了太多可以使用的信息。既然將pcap報文和數據表對應起來,那麼是否可以像操作資料庫那樣隨心所欲的操作pcap報文呢。當然可以,就是要使用wireshark提供的lua介面。
在正式介紹lua介面之前,先介紹一個命令tshark。當然你可能會使用tcpdump,但是 tshark作為wireshark默認支持的命令,很多的特性是非常的好用的。我是這樣理解tshark和 tcpdump之間的關係的,tshark相當於wireshark親生的,而tcpdump則是其收養的。至於功能方面,由於這裡需要使用lua腳本,因此只能使用tshark。首先這個命令能夠完美的完成上述提到的場景,相應的shell腳本如下:
其中最為核心的命令為 tshark -r $LINE -T fields -e http.user_agent -E header=y -E separator=, | sort | uniq -c >> ua.txt,tshark更多參數的使用可以通過tshark -h進行查詢,這裡面用到-r讀文件參數,以及-e屬性,和-T fields配合使用表示列印輸出對應的屬性。主要提一下-e後面表示報文某個屬性項字元串的使用。這個字元串叫做過濾器,在wireshark的右上角的expression中提供了所有的過濾器,如下圖。