簡單的tcpdump抓包使用總結:抓取指定ip、指定網卡、指定端口的包

1.今天由於需要抓包研究網絡問題,所以研究了一下抓取指定ip、指定網卡、指定端口的包並且輸入到文件中

2 tcpdump與Wireshark介紹

在網絡問題的調試中,tcpdump應該說是一個必不可少的工具,和大部分linux下優秀工具一樣,它的特點就是簡單而強大。它是基於Unix系統的命令行式的數據包嗅探工具,可以抓取流動在網卡上的數據包。

默認情況下,tcpdump不會抓取本機內部通訊的報文。根據網絡協議棧的規定,對於報文,即使是目的地是本機,也需要經過本機的網絡協議層,所以本機通訊肯定是通過API進入了內核,並且完成了路由選擇。【比如本機的TCP通信,也必須要socket通信的基本要素:src ip port dst ip port】

如果要使用tcpdump抓取其他主機MAC地址的數據包,必須開啓網卡混雜模式,所謂混雜模式,用最簡單的語言就是讓網卡抓取任何經過它的數據包,不管這個數據包是不是發給它或者是它發出的。一般而言,Unix不會讓普通用戶設置混雜模式,因爲這樣可以看到別人的信息,比如telnet的用戶名和密碼,這樣會引起一些安全上的問題,所以只有root用戶可以開啓混雜模式,開啓混雜模式的命令是:ifconfig en0 promisc, en0是你要打開混雜模式的網卡。

Linux抓包原理:

Linux抓包是通過註冊一種虛擬的底層網絡協議來完成對網絡報文(準確的說是網絡設備)消息的處理權。當網卡接收到一個網絡報文之後,它會遍歷系統中所有已經註冊的網絡協議,例如以太網協議、x25協議處理模塊來嘗試進行報文的解析處理,這一點和一些文件系統的掛載相似,就是讓系統中所有的已經註冊的文件系統來進行嘗試掛載,如果哪一個認爲自己可以處理,那麼就完成掛載。

當抓包模塊把自己僞裝成一個網絡協議的時候,系統在收到報文的時候就會給這個僞協議一次機會,讓它來對網卡收到的報文進行一次處理,此時該模塊就會趁機對報文進行窺探,也就是把這個報文完完整整的複製一份,假裝是自己接收到的報文,彙報給抓包模塊。

Wireshark是一個網絡協議檢測工具,支持Windows平臺、Unix平臺、Mac平臺,一般只在圖形界面平臺下使用Wireshark,如果是Linux的話,直接使用tcpdump了,因爲一般而言Linux都自帶的tcpdump,或者用tcpdump抓包以後用Wireshark打開分析。

在Mac平臺下,Wireshark通過WinPcap進行抓包,封裝的很好,使用起來很方便,可以很容易的制定抓包過濾器或者顯示過濾器,具體簡單使用下面會介紹。Wireshark是一個免費的工具,只要google一下就能很容易找到下載的地方。

所以,tcpdump是用來抓取數據非常方便,Wireshark則是用於分析抓取到的數據比較方便。

3 tcpdump使用

3.1 語法

類型的關鍵字

host(缺省類型): 指明一臺主機,如:host 210.27.48.2

net: 指明一個網絡地址,如:net 202.0.0.0

port: 指明端口號,如:port 23

確定方向的關鍵字

src: src 210.27.48.2, IP包源地址是210.27.48.2

dst: dst net 202.0.0.0, 目標網絡地址是202.0.0.0

dst or src(缺省值)

dst and src

協議的關鍵字:缺省值是監聽所有協議的信息包

fddi

ip

arp

rarp

tcp

udp

其他關鍵字

gateway

broadcast

less

greater

常用表達式:多條件時可以用括號,但是要用轉義

非 : ! or “not” (去掉雙引號)

且 : && or “and”

或 : || or “or”

 

 

例如我本次抓取指定ip、指定網卡、指定端口的包。語句如下:

tcpdump -i eth3 tcp port 5236 and host 172.16.24.13 -w dm.cap

tcpdump命令:

-i 指定網卡,本次指定eth3

port指定端口

host指定ip

-w dm.cap抓取到dm.cap文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章