在Linux中輸入命令man tcpmp給出的定義如下所示:
是不是感覺很懵?我們用通俗、形象、學術的表達方式來全方位描述tcpmp:
常用選項如下所示:
1、第一個抓包示例
-i : 指定用來抓包的網路介面,這個參數在伺服器有多個網卡的時候非常有效
-nn : 不轉換協議和埠號,當tcpmp遇到協議號或埠號,不需要將這些數字轉換為對應的協議名稱或埠名稱,如22埠SSH埠,我們希望顯示22,而非SSH
-X : 將協議頭和包內容原原本本的顯示出來,tcpmp會同時以16進制和ASCII的形式進行顯示,在協議分析時非常好用。
'port 22' : 告訴tcpmp要有選擇的顯示所抓到的包,在該示例中,只顯示源埠或目的埠是22的數據包,其他的數據包則不顯示。
-c : 用來指定抓包的個數,示例設置的個數為1,則代表僅抓取一個包之後就退出不再抓包了。
2、-e 增加數據鏈路層的頭部信息
通過兩個命令的輸出對比,可以看到增加-e選項後,輸出的結果中增加MAC地址信息。而且在輸出內容中會有 oui Unknown ,OUI即Organizationally unique identifier(組織唯一標識符),在任何一塊網卡中燒錄的6位元組MAC地址中,前3個位元組體現了OUI,其表明了網卡的製造組織,通常情況下,該標識符是唯一的。在本例中,由於沒有識別出網卡的製造商,因此顯示為Unknown。
3、-l 將輸出變為行緩沖模式
-l的作用是將tcpmp的輸出行為變為 行緩沖 方式,這樣可以保證tcpmp遇到換行符,就立即將緩沖的內容輸出到標准輸出(stdout),方便利用管道或重定向方式進行後續處理,而不會造成延遲。
在Linux的標准I/O中提供了 全緩沖 、 行緩沖 、 無緩沖 三種緩沖方式。標准錯誤是不帶緩沖的,而終端設備常為行緩沖,其他默認則為全緩沖。
在該例中,將tcpmp輸出的內容通過管道提取第5列,可以用來查看詳細的連接信息。而如果不加 -l 選項時,則只有當緩沖區全部占滿時,tcpmp才會將緩沖區中的內容輸出,這樣就有可能導致輸出不連續的,如果強行結束,則會影響下一行的完整性。
4、-t 輸出不加時間戳
在增加選項 -t 選項後,時間23:48:03.193526就消失了。tcpmp默認情況下是按微秒來計時,因此最一個時間精確到了第6位。
5、 -v 顯示詳細信息
在增加 -v 選項後,會在輸出的內容中增加 tos 、 ttl 、 id 、 offset 、 協議編號 、 總長度 等,如需要理解這些信息,就需要了解TCP/IP協議中的頭的具體定義了。
6、-F 指定過濾表達式所在的文件
在第一個示例中,命令行增加了 'port 22' ,而這一項就叫 過濾條件 ,如果設置了過濾條件,則tcpmp只抓取滿足過濾條件的數據包。如需要設置較為復雜的過濾條件或復用過濾條件時,這時可以將過濾條件保存為文件,然後通過-F載入該過濾文件。
7、 -w 將原始數據包信息保存到文件中
當我們查看保存的文件時,出現的是亂碼。則代表無法直接查看,很有可能是二進制文件。那麼怎麼查看保存的文件了?請看下一個示例。
7、 -r 從文件中讀取原始數據包
通過-w和-r選項即可實現抓包的錄制回放功能。
B. Linux下如何抓指定IP的包
用tcpm命令可以抓指定IP的包,具體命令為:
tcpmp tcp -i eth1 -t -s 0 -c 100 and dst port 22 and src net 192.168.1.1 -w ./target.cap
參數解析:
tcp: ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型。
-i eth1 : 只抓經過介面eth1的包
-t : 不顯示時間戳
-s 0 : 抓取數據包時默認抓取長度為68位元組。加上-S 0 後可以抓到完整的數據包
-c 100 : 只抓取100個數據包
dst port 22 : 抓取目標埠是22的數據包
src net 192.168.1.0/24 : 數據包的源網路地址為192.168.1.1
-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
(2)tcpmp抓包命令擴展閱讀
tcpmp語法格式:
tcpmp [-adeflnNOpqStvx][-c<數據包數目>][-dd][-ddd][-F<表達文件>][-i<網路界面>][-r<數據包文件>][-s<數據包大小>][-tt][-T<數據包類型>][-vv][-w<數據包文件>][輸出數據欄位]
tcpmp主要參數說明:
1、-a 嘗試將網路和廣播地址轉換成名稱。
2、-c<數據包數目> 收到指定的數據包數目後,就停止進行傾倒操作。
3、-d 把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標准輸出。
4、-dd 把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標准輸出。
5、-ddd 把編譯過的數據包編碼轉換成十進制數字的格式,並傾倒到標准輸出。
6、-e 在每列傾倒資料上顯示連接層級的文件頭。
7、-f 用數字顯示網際網路地址。
8、-F<表達文件> 指定內含表達方式的文件。
9、-i<網路界面> 使用指定的網路截面送出數據包。
10、-l 使用標准輸出列的緩沖區。
11、-n 不把主機的網路地址轉換成名字。
12、-N 不列出域名。
C. tcpmp抓包命令
1、tcpmp:默認啟動。普通情況下,直接啟動tcpmp將監視第一個網路介面上所有流過的數據包。
2、tcpmp -i eth1:監視指定網路介面的數據包,如果不指定網卡,默認tcpmp只會監視第一個網路介面,一般是eth0,下面的例子都沒有指定網路介面。
3、tcpmp host sundown:監視指定主機的數據包。列印所有進入或離開sundown的數據包。
4、tcpmp -i eth0 src host hostname:截獲主機hostname發送的所有數據。
5、tcpmp -i eth0 dst host hostname:監視所有送到主機hostname的數據包。
6、tcpmp tcp port 23 and host 210.27.48.1:如果想要獲取主機210.27.48.1接收或發出的telnet包。
7、tcpmp udp port 123:對本機的udp 123埠進行監視123為ntp的服務埠。
D. TCPDUMP 抓包 怎麼查看 抓的包的內容
1、tcpmp檢測登錄linux系統輸入tcpmp,如果找不到表示沒有安裝。也可以用rpm查詢。
E. 鎯崇湅鍒拌繛鎺ョ殑SYN\SRT\FIN\ACK絳夊寘錛岀敤tcpmp錛屽懡浠ゆ槸鎬庢牱鐨
榛樿ゆ儏鍐典笅tcpmp灝嗕竴鐩存姄鍖咃紝鐩村埌鎸変笅鈥漜trl+c鈥濅腑姝錛屼嬌鐢-c閫夐」鎴戜滑鍙浠ユ寚瀹氭姄鍖呯殑鏁伴噺錛
bash浠g爜
slot10_suse10sp2:/tmp/lx # tcpmp -c 2 -i eth0
tcpmp: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:58:05.656104 IP 10.71.171.140.ssh > 10.70.121.92.autodesk-lm: P 1210443473:1210443589(116) ack2583117929 win 12864
10:58:05.657074 IP 10.70.121.92.autodesk-lm > 10.71.171.140.ssh: . ack 116 win 65211
2 packets captured
6 packets received by filter
0 packets dropped by kernel
浠ヤ笂渚嬪瓙涓錛屽彧閽堝筫th0緗戝彛鎶2涓鍖呫
F. 在linux命令行環境下如何抓取網路數據包
眾所周知,在Windows下開發運行環境下,在調試網路環境時,可以可以很方便的藉助wireshark等軟體進行抓包分析;並且在linux或者Ubuntu等桌面版里也可以進行安裝抓包工具進行抓包分析,但總有一些情況,無法直接運用工具(比如一些沒有界面的linux環境系統中),則此時我們就需要使用到最簡單的tcpmp命令進行網路抓包。
一般的,linux下抓包時,抓取特定的網路數據包到當前文件夾下的文件中,再把文件拷貝出來利用Windows下的wireshark軟體進行分析。
tcpmp命令詳解:(簡單舉例)
1、抓取到的文件為filename.cap,然後將此文件拷貝到Windows下,使用wireshar打開後,即可對此文件進行分析。
2、eth0 是主機的網路適配器名稱,具體的參數值可以在linux命令行窗口中通過 ifconfig 指令查詢。