tcpdump是最快捷方便的抓包方式,還能夠加深對網絡協議的理解。android下能夠經過以下方式抓包: 1 Android上啓動tcpdump
Android設備能夠把tcpdump的可執行文件上傳到android設備上,而後經過mac遠程登陸android設備運行tcpdump,前提是這臺android設備必須已經root過。步驟以下:html
下載android版本的tcpdump linux
從這個連接 能夠下載到專門爲android系統編譯的tcpdump版本。android
經過adb將tcpdump上傳到android設備 ios
經過adb push將tcpdump文件上傳到特定的目錄,這裏咱們選擇/sdcard/data目錄。git
<img src="https://pic3.zhimg.com/42eb868d9be25a56d0c6dc4418fcd9a6_b.png" data-rawwidth="1188" data-rawheight="232" class="origin_image zh-lightbox-thumb" width="1188" data-original="https://pic3.zhimg.com/42eb868d9be25a56d0c6dc4418fcd9a6_r.png">
在android設備上運行tcpdump github
經過adb shell登錄設備,並執行tcpdump,最後一步執行./tcpdump便可。正則表達式
<img src="https://pic3.zhimg.com/7e4f2b2b37ccd973c8cd42bfb4df87aa_b.png" data-rawwidth="960" data-rawheight="186" class="origin_image zh-lightbox-thumb" width="960" data-original="https://pic3.zhimg.com/7e4f2b2b37ccd973c8cd42bfb4df87aa_r.png">
2. 分析tcpdump輸出
通過上面的步驟成功運行tcpdump以後,接下來就能夠分析輸出的網絡包內容了,iOS設備和Android設備的輸出是一致的。咱們先來解析下幾個基本的格式:shell
<img src="https://pic3.zhimg.com/a00d7dbce107fa6b5c03519730624352_b.png" data-rawwidth="1710" data-rawheight="886" class="origin_image zh-lightbox-thumb" width="1710" data-original="https://pic3.zhimg.com/a00d7dbce107fa6b5c03519730624352_r.png">
圖中紅色方框內的部分是一個ip包的詳細記錄,相似的紀錄還有好幾條。這裏咱們着重分析第一條的各部分字段含義。緩存
14:37:41.615018 很簡單,是該包接收到的時間。安全
17.143.164.37.5223 是發送方的ip地址及端口號(5223是端口號)。
10.29.44.140.58036 是我android的ip地址及端口號。
Flags [P.] 是tcp包header部分的第14個字節的P位。這個字節所包含的幾個flag很重要,後面我會單獨詳細講解。這裏P位表示接受方須要立刻將包push到應用層。
seq 1:54 tcp包的seq號,1是起始值,54結束值。tcp之因此被認爲是流,是由於tcp包所攜帶的每個字節都有標號(seq號)。1:54代表總共有54個字節被接受,其中一個字節是三次握手階段所使用,因此一共發送的長度是53字節。
ack 101 tcp包的ack號,ack 101代表seq號爲100的字節已被確認收到,下一個指望接收的seq號從101開始。
win 255 win表示的是tcp包發送方,做爲接受方還能夠接受的字節數。這裏win 255代表ip爲17.143.164.37的主機還能夠接受255個字節。
options [nop,nop,…] options[…]表示的是該tcp包的options區域,nop是no opertion的縮寫,沒什麼實際用途,主要是用作padding,由於options區域按協議規定必須是4字節的倍數。
options[… TS val 2381386761] ts val這個值是tcp包的時間戳,不過這個時間戳和設備的系統時間沒啥關係,剛開始是隨機值,後面隨着系統時鐘自增加。這個時間戳主要用處是seq序列號越界從0從新開始後,能夠確認包的順序。
options[… ecr 427050796] ts ecr這個值主要用來計算RTT。好比A發送一個tcp包給B,A會在包裏帶上TS val,B收到以後在ack包裏再把這個值原樣返回,A收到B的ack包以後再根據本地時鐘就能夠計算出RTT了。這個值只在ack包裏有效,非ack包ecr的值就爲0.
length 53 這個length是應用層傳過來的數據大小,不包括tcp的header。這個值和咱們上面分析的seq 1:54是一致的。
以上就是一個基本的tcp包結構,你們能夠按照上面的分析再把其餘幾個包理解下。咱們在作應用的時候面對的更可能是http協議,但對一個http請求是怎麼經過tcp/ip分解成一個個的packet,而後怎麼在網絡上穩定可靠的傳輸,要有個基本的印象。下面咱們再看下tcpdump更多的功能,這些功能都是基於對tcp/ip協議的理解,遇到不理解的建議多google下相關的技術概念。
3. tcpdump知識拓展
再繼續深刻tcpdump以前,先貼上一張tcp header格式圖,常看常新。
[https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true ](https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true )" width="1056">
3.1 TCP Flags(tcp header第十四個字節)
咱們再仔細看下上面提到的flags概念,flags位於tcp header的第十四個字節,包含8個比特位,也就是上圖的CWR到FIN。這8個比特位都有特定的功能用途,分別是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。
CWR ,ECE 兩個flag是用來配合作congestion control的,通常狀況下和應用層關係不大。發送方的包ECE(ECN-Echo)爲0的時候表示出現了congestion,接收方回的包裏CWR(Congestion Window Reduced)爲1代表收到congestion信息並作了處理。咱們重點看其餘六個flag。
URG URG表明Urgent,代表包的優先級高,須要優先傳送對方並處理。像咱們平時使用terminal的時候常常ctrl+c來結束某個任務,這種命令產生的網絡數據包就須要urgent。
ACK 也就是咱們所熟悉的ack包,用來告訴對方上一個數據包已經成功收到。不過通常不會爲了ack單獨發送一個包,都是在下一個要發送的packet裏設置ack位,這屬於tcp的優化機制,參見delayed ack 。
PSH Push咱們上面解釋過,接收方接收到P位的flag包須要立刻將包交給應用層處理,通常咱們在http request的最後一個包裏都能看到P位被設置。
RST Reset位,代表packet的發送方立刻就要斷開當前鏈接了。在http請求結束的時候通常能夠看到一個數據包設置了RST位。
SYN SYN位在發送創建鏈接請求的時候會設置,咱們所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。
FIN Finish位設置了就表示發送方沒有更多的數據要發送了,以後就要單向關閉鏈接了,接收方通常會回一個ack包。接收方再同理發送一個FIN就能夠雙向關閉鏈接了。
這8個flag首字母分別是:C E U A P R S F。初看難以記憶,我腦洞了下,把它們組合成 supr cafe,固然少了super少了個e,我能夠將就下。咱們在使用tcpdump的時候會常常看到這幾個flag,[S],[P],[R],[F],[.]。其餘幾個都好理解,[.]特殊點,是個佔位符,沒有其餘flag被設置的時候就顯示這個佔位符,通常表示ack。
3.2 tcpdump 更多使用參數
這部分咱們來看下tcpdump經常使用的一些命令參數。文章最開始部分的tcpdump命令是這樣的:sudo tcpdump -i rvi0 -AAl。 -i rvi0 -AAl都是屬於參數部分。常見的有這些:
-i, 要監聽的網卡名稱,-i rvi0監聽虛擬網卡。不設置的時候默認監聽全部網卡流量。
-A, 用ASCII碼展現所截取的流量,通常用於網頁或者app裏http請求。-AA能夠獲取更多的信息。
-X,用ASCII碼和hex來展現包的內容,和上面的-A比較像。-XX能夠展現更多的信息(好比link layer的header)。
-n,不解析hostname,tcpdump會優先暫時主機的名字。-nn則不展現主機名和端口名(好比443端口會被展現成https)。
-s,截取的包字節長度,默認狀況下tcpdump會展現96字節的長度,要獲取完整的長度能夠用-s0或者-s1600。
-c,只截取指定數目的包,而後退出。
-v,展現更多的有用信息,還能夠用-vv -vvv增長信息的展現量。
src,指明ip包的發送方地址。
dst,指明ip包的接收方地址。
port,指明tcp包發送方或者接收方的端口號。
and,or,not,操做法,字面意思。
上面幾個是我我的比較經常使用的,更多的參數能夠參考這個詳細文檔 。有興趣的能夠分析下面幾個例子練習下:
tcpdump ‘tcp[13] & 16!=0’
tcpdump src port 80 and tcp
tcpdump -vv src baidu and not dst port 23
tcpdump -nnvvS src 192.0.1.100 and dst port 443
4. 用tcpdump分析http完整請求
說了這麼多,咱們再來實戰下,看一個完整的http請求流程。 下面截圖裏的流量是我監聽的 知乎App點贊以後發送的一個https請求。我以前先分析過server的ip地址了,tcpdump命令是:
sudo tcpdump -i rvi0 -AAl src 60.28.215.123 or dst 60.28.215.123
<img src="https://pic3.zhimg.com/ae670a08a7ab35dc7887b2f8e55b607e_b.png" data-rawwidth="1780" data-rawheight="1596" class="origin_image zh-lightbox-thumb" width="1780" data-original="https://pic3.zhimg.com/ae670a08a7ab35dc7887b2f8e55b607e_r.png">
圖中列出了6個前面的packet,10.29.44.240是我android的ip地址,60.28.215.123是知乎server的ip地址,紅色方框內是android發出的packet,白色方框內是server發出的packet。packet1是android三次握手的第一個syn包,packet2是server ack+syn的包,packet3是android ack的包。這3個packet以後tcp的三次握手就完成了。
packet4是android發出的http request。長度只有240個字節,因此一個packet就發過去了,固然還設置了flags的P位,request須要立刻被應用層處理。包裏面出現了spdy,點贊。
packet5是server ack剛收到的包,長度位0,因此這僅僅是一個ack包。
packet6是server返回http的response了,1388個字節。packet5和packet6都ack了seq爲241的包,固然是爲了增長ack的成功率。
中間還有好幾個packet就不仔細分析了,最後再看下請求完成的最後幾個包:
<img src="https://pic4.zhimg.com/357efe4293aa6e7e03b5d87481c64f3b_b.png" data-rawwidth="1772" data-rawheight="318" class="origin_image zh-lightbox-thumb" width="1772" data-original="https://pic4.zhimg.com/357efe4293aa6e7e03b5d87481c64f3b_r.png">
最後兩個packet比較簡單,android發送個FIN+ACK的包就斷開鏈接了,server直接發送了一個RST包後也斷開鏈接了。
Tcpdump的詳細用法
1. TCPDump介紹
TcpDump能夠將網絡中傳送的數據包的「頭」徹底截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等 邏輯語句來幫助你去掉無用的信息。tcpdump就是一種免費的網絡分析工具,尤爲其提供了源代碼,公開了接口,所以具有很強的可擴展性,對於網絡維護和 入侵者都是很是有用的工具。tcpdump存在於基本的FreeBSD系統中,因爲它須要將網絡界面設置爲混雜模式,普通用戶不能正常執行,但具有 root權限的用戶能夠直接執行它來獲取網絡上的信息。所以系統中存在網絡分析工具主要不是對本機安全的威脅,而是對網絡上的其餘計算機的安全存在威脅。
咱們用盡可能簡單的話來定義tcpdump,就是:dump the traffice on anetwork.,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。做爲互聯網上經典的的系統管理員必備工具,tcpdump以其強大的功能, 靈活的截取策略,成爲每一個高級的系統管理員分析網絡,排查問題等所必備的東西之一。tcpdump提供了源代碼,公開了接口,所以具有很強的可擴展性,對 於網絡維護和入侵者都是很是有用的工具。tcpdump存在於基本的FreeBSD系統中,因爲它須要將網絡界面設置爲混雜模式,普通用戶不能正常執行, 但具有root權限的用戶能夠直接執行它來獲取網絡上的信息。所以系統中存在網絡分析工具主要不是對本機安全的威脅,而是對網絡上的其餘計算機的安全存在 威脅。
2. TcpDump的使用 普通狀況下,直接啓動tcpdump 將監視第一個網絡界面上全部流過的數據包。 # tcpdump tcpdump : listening on fxp0 11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50 11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43 0000 0000 0080 0000 1007 cf08 0900 0000 0e80 0000 902b 4695 0980 8701 0014 0002 000f 0000 902b 4695 0008 00 11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97 ffff 0060 0004 ffff ffff ffff ffff ffff 0452 ffff ffff 0000 e85b 6d85 4008 0002 0640 4d41 5354 4552 5f57 4542 0000 0000 0000 00 tcpdump 支持至關多的不一樣參數,如使用-i參數指定tcpdump 監聽的網絡界面 ,這在計算機具備多個網絡界面時很是有用,使用-c參數指定要監聽的數據包數量 ,使用-w參數指定將監聽到的數據包寫入文件中保存 ,等等。
然而更復雜的tcpdump 參數是用於過濾目的,這是由於網絡中流量很大,若是不加分辨將全部的數據包都截留下來,數據量太大,反而不容易發現須要的數據包。使用這些參數定義的過濾規則能夠截留特定的數據包,以縮小目標,才能更好的分析網絡中存在的問題。tc pdump 使用參數指定要監視數據包的類型、地址、端口等 ,根據具體的網絡問題,充分利用這些過濾規則就能達到迅速定位故障的目的。請使用man tcpdump 查看這些過濾規則的具體用法。
顯然爲了安全起見,不用做網絡管理用途的計算機上不該該運行這一類的網絡分析軟件,爲了屏蔽它們,能夠屏蔽內核中的bpfilter僞設備。通常狀況下網絡硬件和TCP/IP堆棧不支持接收或發送與本計算機無關的數據包,爲了接收這些數據包,就必須使用網卡的混雜模式,並繞過標準的TCP/IP堆棧才行。在FreeBSD下,這就須要內核支持僞設備bpfilter。所以,在內核中取消bpfilter支持,就能屏蔽tcpdump 之類的網絡分析工具 。
而且當網卡被設置爲混雜模式時,系統會在控制檯和日誌文件中留下記錄,提醒管理員留意這臺系統是否被用做攻擊同網絡的其餘計算機的跳板。
May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled
雖然網絡分析工具能將網絡中傳送的數據記錄下來,可是網絡中的數據流量至關大,如何對這些數據進行分析、分類統計、發現並報告錯誤倒是更關鍵 的問題。網絡中的數據包屬於不一樣的協議,而不一樣協議數據包的格式也不一樣。所以對捕獲的數據進行解碼,將包中的信息儘量的展現出來,對於協議分析工具來說 更爲重要。昂貴的商業分析工具的優點就在於它們能支持不少種類的應用層協議,而不只僅只支持tcp、udp等低層協議 。
從上面tcpdump 的輸出能夠看出,tcpdump 對截獲的數據並無進行完全解碼,數據包內的大部份內容是使用十六進制的形式直接打印輸出的。顯然這不利於分析網絡故障,一般的解決辦法是先使用帶-w參數的tcpdump 截獲數據並保存到文件中,而後再使用其餘程序進行解碼分析 。固然也應該定義過濾規則,以免捕獲的數據包填滿整個硬盤。FreeBSD提供的一個有效的解碼程序爲tcpshow ,它能夠經過Packages Collection來安裝。
# pkg_add /cdrom/packages/security/tcpshow* # tcpdump -c 3 -w tcpdump .outtcpdump : listening on fxp0 # tcpshow < tcpdump .out --------------------------------------------------------------------------- Packet 1 TIME:12:00:59.984829 LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026 <*** No decode support for encapsulated protocol ***> --------------------------------------------------------------------------- Packet 2 TIME:12:01:01.074513 (1.089684) LINK:00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARP ARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=request sender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3 target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3 --------------------------------------------------------------------------- Packet 3 TIME:12:01:01.985023 (0.910510) LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026 <*** No decode support for encapsulated protocol ***>
tcpshow能以不一樣方式對數據包進行解碼,並以不一樣的方式顯示解碼數據,使用者能夠根據其手冊來選擇最合適的參數對截獲的數據包進行分析。從上面的例子中能夠看出,tcpshow支持的協議也並不豐富,對於它不支持的協議就沒法進行解碼。
除了tcpdump 之 外,FreeBSD的PackagesCollecion中還提供了Ethereal和Sniffit兩個網絡分析工具,以及其餘一些基於網絡分析方式的 安全工具。其中Ethereal運行在X Window 下,具備不錯的圖形界面,Sniffit使用字符窗口形式,一樣也易於操做。然而因爲tcpdump 對 過濾規則的支持能力更強大,所以系統管理員仍然更喜歡使用它。對於有經驗的網絡管理員,使用這些網絡分析工具不但能用來了解網絡究竟是如何運行的,故障出 如今何處,還能進行有效的統計工做,如那種協議產生的通訊量佔主要地位,那個主機最繁忙,網絡瓶頸位於何處等等問題。所以網絡分析工具是用於網絡管理的寶 貴系統工具。爲了防止數據被濫用的網絡分析工具截獲,關鍵仍是要在網絡的物理結構上解決。經常使用的方法是使用交換機或網橋將信任網絡和不信任網絡分隔開,可 以防止外部網段竊聽內部數據傳輸,但仍然不能解決內部網絡與外部網絡相互通訊時的數據安全問題。若是沒有足夠的經費將網絡上的共享集線器升級爲以太網交換 機,可使用FreeBSD系統執行網橋任務。這須要使用option BRIDGE編譯選項從新定製內核,此後使用bridge命令啓動網橋功能。
tcpdump 採用命令行方式,它的命令格式爲: tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ] [ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ] [ -T 類型 ] [ -w 文件名 ] [表達式 ]
(1). tcpdump 的選項介紹
-a 將網絡地址和廣播地址轉變成名字; -d 將匹配信息包的代碼以人們可以理解的彙編格式給出; -dd 將匹配信息包的代碼以c語言程序段的格式給出; -ddd 將匹配信息包的代碼以十進制的形式給出; -e 在輸出行打印出數據鏈路層的頭部信息; -f 將外部的Internet地址以數字的形式打印出來; -l 使標準輸出變爲緩衝行形式; -n 不把網絡地址轉換成名字; -t 在輸出的每一行不打印時間戳; -v 輸出一個稍微詳細的信息,例如在ip包中能夠包括ttl和服務類型的信息; -vv 輸出詳細的報文信息; -c 在收到指定的包的數目後,tcpdump 就會中止; -F 從指定的文件中讀取表達式,忽略其它的表達式; -i 指定監聽的網絡接口; -r 從指定的文件中讀取包(這些包通常經過-w選項產生); -w 直接將包寫入文件中,並不分析和打印出來; -T 將監聽到的包直接解釋爲指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議;)
(2). tcpdump 的表達式介紹
http://anheng.com.cn/news/24/586.html 表達式是一個正則表達式,tcpdump 利用它做爲過濾報文的條件,若是一個報文知足表達式的條件,則這個報文將會被捕獲。若是沒有給出任何條件,則網絡上全部的信息包將會被截獲。在表達式中通常以下幾種類型的關鍵字。
第一種是關於類型的關鍵字 ,主要包括host,net,port, 例如 host 210.27.48.2,指明210.27.48.2是一臺主機,net 202.0.0.0 指明 202.0.0.0是一個網絡地址,port 23指明端口號是23。若是沒有指定類型,缺省的類型是host.http://anheng.com.cn/news/24/586.html
第二種是肯定傳輸方向的關鍵字 ,主要包括src , dst ,dst or src, dst and src,這些關鍵字指明瞭傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net202.0.0.0 指明目的網絡地址是202.0.0.0 。若是沒有指明方向關鍵字,則缺省是src or dst關鍵字。
http://anheng.com.cn/news/24/586.html 第三種是協議的關鍵字 , 主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分佈式光纖數據接口網絡)上的特定的網絡協議,實際上它 是"ether"的別名,fddi和ether具備相似的源地址和目的地址,因此能夠將fddi協議包看成ether的包進行處理和分析。其餘的幾個關鍵 字就是指明瞭監聽的包的協議內容。若是沒有指定任何協議,則tcpdump 將會監聽全部協議的信息包。
除了這三種類型的關鍵字以外,其餘重要的關鍵字以下:gateway,broadcast,less,greater,還有三種邏輯運算,取非運算是 'not ' '! ',與運算是'and','&&';或運算 是'or','││';這些關鍵字能夠組合起來構成強大的組合條件來知足人們的須要,下面舉幾個例子來講明。
A想要截獲全部210.27.48.1 的主機收到的和發出的全部的數據包:
#tcpdump host 210.27.48.1
B想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊,使用命令:(在命令行中使用括號時,必定要添加'\')
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
C若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
D若是想要獲取主機210.27.48.1接收或發出的telnet包,使用以下命令:
#tcpdump tcp port 23 host 210.27.48.1
E 對本機的udp 123 端口進行監視 123 爲ntp的服務端口
# tcpdump udp port 123
F 系統將只對名爲hostname的主機的通訊數據包進行監視。主機名能夠是本地主機,也能夠是網絡上的任何一臺計算機。下面的命令能夠讀取主機hostname發送的全部數據:
#tcpdump -i eth0 src host hostname
G 下面的命令能夠監視全部送到主機hostname的數據包:
#tcpdump -i eth0 dst host hostname
H 咱們還能夠監視經過指定網關的數據包:
#tcpdump -i eth0 gateway Gatewayname
I 若是你還想監視編址到指定端口的TCP或UDP數據包,那麼執行如下命令:
#tcpdump -i eth0 host hostname and port 80
J 若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
K 想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊,使用命令:
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)
L 若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
M 若是想要獲取主機210.27.48.1接收或發出的telnet包,使用以下命令:
#tcpdump tcp port 23 host 210.27.48.1
(3). tcpdump 的輸出結果介紹
http://anheng.com.cn/news/24/586.html 下面咱們介紹幾種典型的tcpdump 命令的輸出信息
A,數據鏈路層頭信息 使用命令: #tcpdump --e host ice ice 是一臺裝有linux 的主機,她的MAC地址是0:90:27:58:AF:1A H219是一臺裝有SOLARIC的SUN工做站,它的MAC地址是8:0:20:79:5B:46;上一條命令的輸出結果以下所示: 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是顯示的時間, 847509是ID號,eth0 <表示從網絡接口eth0 接受該數據包,eth0>表示從網絡接口設備發送數據包, 8:0:20:79:5b:46是主機H219的MAC地址,它代表是從源地址H219發來的數據包.0:90:27:58:af:1a是主機ICE的 MAC地址,表示該數據包的目的地址是ICE . ip 是代表該數據包是IP數據包,60是數據包的長度, h219.33357 > ice.telnet代表該數據包是從主機H219的33357端口發往主機ICE的TELNET(23)端口. ack 22535代表對序列號是222535的包進行響應. win 8760代表發送窗口的大小是8760.
B,ARP包的TCPDUMP輸出信息
使用命令:#tcpdump arp
獲得的輸出結果是: 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a) 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) 分 析: 22:32:42是時間戳, 802509是ID號, eth0 >代表從主機發出該數據包, arp代表是ARP請求包,who-has route tell ice代表是主機ICE請求主機ROUTE的MAC地址。0:90:27:58:af:1a是主機ICE的MAC地址。
C,TCP包的輸出信息
用TCPDUMP捕獲的TCP包的通常輸出信息是:
src > dst: flags data-seqno ack window urgent options src> dst:代表從源地址到目的地址, flags是TCP包中的標誌信息,S 是SYN標誌, F (FIN), P (PUSH) , R(RST) "." (沒有標記); data-seqno是數據包中的數據的順序號, ack是下次指望的順序號,window是接收緩存的窗口大小, urgent代表數據包中是否有緊急指針. Options是選項.
D,UDP包的輸出信息
用TCPDUMP捕獲的UDP包的通常輸出信息是:
route.port1 > ice.port2: udp lenth UDP十分簡單,上面的輸出行代表從主機ROUTE的port1端口發出的一個UDP數據包到主機ICE的port2端口,類型是UDP, 包的長度是lenth
3. 輔助工具
(1) 想查看TCP或者UDP端口使用狀況,使用 netstat -anp 若是有些進程看不見,如只顯示」-」,能夠嘗試 sudo netstat -anp 若是想看某個端口的信息,使用lsof命令,如: sudo lsof -i :631
-bash-3.00# netstat -tln
netstat -tln 命令是用來查看linux的端口使用狀況
/etc/init.d/vsftp start 是用來啓動ftp端口~!
看文件/etc/services
netstat
查看已經鏈接的服務端口(ESTABLISHED)
netstat -a
查看全部的服務端口(LISTEN,ESTABLISHED)
sudo netstat -ap
查看全部 的服務端口並顯示對應的服務程序名
nmap <掃描類型><掃描參數>
例如:
nmap localhost
nmap -p 1024-65535 localhost
nmap -PT 192.168.1.127-245
當咱們使用 netstat -apn 查看網絡鏈接的時候,會發現不少相似下面的內容:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 52 218.104.81.152:7710 211.100.39.250:29488 ESTABLISHED 6111/1
顯示這臺服務器開放了7710端口,那麼 這個端口屬於哪一個程序呢?咱們可使用 lsof -i :7710 命令來查詢:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 1990 root 3u IPv4 4836 TCP *:7710 (LISTEN)
這樣,咱們就知道了7710端口是屬於sshd程序的。
(2) 運行tcpdump命令出現錯誤信息排除
tcpdump: no suitable device foundtcpdump: no devices found /dev/bpf4: A file or directory in the path name does not exist. 解決方案 2種緣由:1.權限不夠,通常不通過處理,只用root用戶能使用tcpdump2.缺省只能同時使用4個tcpdump,如用完,則報此類錯。須要停掉多餘的tcpdump