抓包工具:tcpdump抓包命令詳解

抓包工具:tcpdump抓包命令詳解

簡介:javascript

tcpdump全稱:dump the traffic on a network,根據使用者的定義對網絡上的數據包進行截獲的包分析工具。 tcpdump能夠將網絡中傳送的數據包的「頭」徹底截獲下來提供分析。它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。css

 

名稱:java

tcpdump -  dump traffic on a network(轉儲網絡上的流量);node

 

描述:python

Tcpdump打印出一個與布爾表達式匹配的網絡接口上數據包內容的描述。它也能夠用-w標誌運行,這會致使它將分組數據保存到一個文件中供之後分析,和/或使用-r標誌,這會致使它從保存的分組文件中讀取,而不是讀取分組從網絡界面。在任何狀況下,只有匹配表達式的數據包纔會被tcpdump處理。ios

 

若是Tcpdump沒有運行-c標誌,它將繼續捕獲數據包,直到它被一個SIGINT信號(例如,經過輸入中斷字符,一般爲control-C)或一個SIGTERM信號(一般由kill(1)命令); 若是使用-c 標誌運行,它將捕獲數據包,直到它被SIGINT或SIGTERM信號中斷或指定的數據包已被處理。nginx

 

當tcpdump完成捕獲包時,它會報告計數:git

  • 數據包「捕獲」(這是tcpdump接收和處理的數據包數量);
  • (這個意思取決於你正在運行tcpdump的操做系統,可能在操做系統的配置方式上 - 若是在命令行中指定了某個過濾器,則在某些操做系統上不管它們是否與過濾器表達式匹配,即便它們與過濾器表達式匹配,不管tcpdump是否已經讀取並處理它們,在其餘OS上,它都只計算由過濾器表達式匹配的數據包,而無論tcpdump是否已經讀取並處理了它們,而在其餘操做系統上,它只計算由過濾器表達式匹配並由tcpdump處理的數據包;
  • 數據包「由內核丟棄」(若是操做系統將該信息報告給應用程序,則這是因爲運行tcpdump的操做系統中的數據包捕獲機制,因爲缺乏緩衝區空間而丟棄的數據包數量;若是不是,則報告爲0)。

 

在支持SIGINFO信號的平臺上,例如大多數BSD(包括Mac OS X)和Digital / Tru64 UNIX,它會在接收到SIGINFO信號(例如,經過輸入「狀態」字符,一般是control-T,儘管在一些平臺上,好比Mac OS X,「status」字符默認沒有設置,因此你必須使用stty(1)來設置它),而且將繼續捕獲數據包。算法

 

從網絡接口讀取數據包可能須要您有特殊的權限; 有關詳細信息,請參閱pcap(3PCAP)手冊頁。讀取保存的數據包文件不須要特殊的權限。shell

 

用法:

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -G rotate_seconds ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ expression ]

tcpdump [ -AdDefIKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c 計數 ] [ -C file_size ] [ -G rotate_seconds ] [ -F 文件 ] [ -i 界面 ] [ -m 模塊 ] [ -M 祕密 ] [ -r 文件 ] [ -s snaplen ] [ -T 類型 ] [ -w 文件 ] [ -W filecount ] [ -E spi @ ipaddr算法:祕密,... ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z 用戶 ] [ 表達式 ]

 

選項:

-A     在ASCII中打印每一個數據包(減去其連接級別標題)。方便捕捉網頁。

-B     將操做系統捕獲緩衝區大小設置爲buffer_size。

-c     收到計數包後退出。

 

-C     在將一個原始數據包寫入一個保存文件以前,檢查該文件當前是否大於file_size,若是是,關閉當前的保存文件並打開一個新文件。第一個保存文件後的保存文件將具備用-w標誌指定的名稱,後面跟着一個數字,從1開始並繼續向上。file_size的單位是數百萬字節(1,000,000字節,而不是1,048,576字節)。請注意,與-Z選項(默認狀況下啓用)一塊兒使用時,在打開第一個savefile以前會刪除權限。

 

-d     將已編譯的數據包匹配代碼以可讀的形式轉儲到標準輸出並中止。

-dd     將數據包匹配代碼轉儲爲C程序片斷。

-ddd     將數據包匹配代碼轉儲爲十進制數(以count開頭)。

 

-D     打印系統上可用的網絡接口列表以及哪一個tcpdump能夠捕獲數據包。對於每一個網絡接口,都會打印一個編號和一個接口名稱(可能後跟接口的文本描述)。能夠將接口名稱或編號提供給-i標誌以指定要捕獲的接口。這對於沒有命令列出的系統是有用的(例如,Windows系統,或缺乏ifconfig -a的 UNIX系統); 在Windows 2000和更高版本的系統中,該接口名稱是一個有點複雜的字符串。該-D若是標誌將不被支持的tcpdump與舊版本的內置的libpcap缺乏該函數pcap_findalldevs() 函數。

 

-e     在每一個轉儲線上打印連接級別標題。

 

-E     使用spi @ ipaddr algo:secret來解密尋址到addr幷包含安全參數索引值spi的 IPsec ESP數據包。這種組合能夠用逗號或換行符來重複。

  • 請注意,目前支持爲IPv4 ESP數據包設置密碼。
  • 算法多是des-cbc,3des-cbc,blowfish-cbc,rc3-cbc,cast128-cbc,或者沒有。缺省值是des-cbc。解密數據包的能力只有在使用加密技術編譯tcpdump時才存在。
  • 祕密是ESP密鑰的ASCII文本。若是前面有0x,那麼將讀取一個十六進制值。
  • 該選項採用RFC2406 ESP,而不是RFC1827 ESP。該選項僅用於調試目的,而且不鼓勵使用具備真「祕密」密鑰的該選項。經過在命令行上顯示IPsec密鑰,您能夠經過ps(1)和其餘場合使其餘人看到它。
  • 除了上面的語法以外,語法文件名能夠用來讓tcpdump讀取提供的文件。文件在接收到第一個ESP數據包時打開,因此tcpdump可能已經被賦予的任何特殊權限應該已經被放棄了。

 

-f     打印'外國'的IPv4地址數字而不是象徵性的(這個選項是爲了解決Sun的NIS服務器嚴重的腦損傷 - 一般它會永久性地翻譯非本地的互聯網號碼)。

  • 對「外部」IPv4地址的測試使用捕獲正在進行的接口的IPv4地址和網絡掩碼完成。若是該地址或網絡掩碼不可用,則多是由於要執行捕獲的接口沒有地址或網絡掩碼,或者由於捕獲是在能夠在多個接口上捕獲的Linux「any」接口上完成的,此選項將沒法正常工做。

 

-F     使用文件做爲過濾器表達式的輸入。在命令行上給出的附加表達式將被忽略。

 

-G     若是指定,則每rotate_seconds秒旋轉使用-w選項指定的轉儲文件。保存文件將具備由-w指定的名稱,該名稱 應包含由strftime(3)定義的時間格式。若是沒有指定時間格式,則每一個新文件都將覆蓋前一個。若是與-C選項一塊兒使用,則文件名將採用「 file <count>」的形式。

 

-i     在界面上聽。若是未指定,則tcpdump將在系統接口列表中搜索編號最小的已配置接口(不包括環回)。選擇最先的比賽會打破關係。

  • 在具備2.2或更高版本內核的Linux系統上,可使用「any」 接口參數來捕獲全部接口的數據包。請注意,「任何」設備上的捕捉不會在混雜模式下進行。
  • 若是支持-D標誌,那麼由該標誌打印的接口號能夠用做接口參數。

 

-I     將界面置於「監視模式」; 這僅在IEEE 802.11 Wi-Fi接口上受支持,而且僅在某些操做系統上受支持。

  • 請注意,在監視器模式下,適配器可能會與其關聯的網絡分離,所以您將沒法使用該適配器使用任何無線網絡。這可能會阻止訪問網絡服務器上的文件,或者解決主機名或網絡地址(若是您正在監視模式下進行捕獲而且沒有用另外一個適配器鏈接到另外一個網絡)。
  • 這個標誌會影響-L標誌的輸出。若是未指定-I,則只顯示不處於監視模式的可用鏈路層類型; 若是指定-I,則只顯示在監視模式下可用的鏈路層類型。

 

-K     不要試圖驗證IP,TCP或UDP校驗和。這對於在硬件中執行部分或所有這些校驗和計算的接口很是有用; 不然,全部傳出的TCP校驗和將被標記爲壞。

 

-l     使stdout行緩衝。若是您但願在捕獲數據的同時查看數據,則這頗有用。例如:

tcpdump -l | tee dat'' or ''tcpdump -l > dat & tail -f dat

 

-L     在指定的模式下列出接口的已知數據鏈路類型,而後退出。已知數據連接類型的列表能夠取決於指定的模式; 例如,在某些平臺上,當不處於監控模式時,Wi-Fi接口可能支持一組數據鏈路類型(例如,它可能僅支持僞造的以太網報頭,或者可能支持802.11報頭但不支持具備無線電信息的802.11報頭)和另外一組數據鏈路類型(例如,它可能支持802.11報頭,或802.11報頭,只有在監測模式下才有無線電信息)。

 

-m     從文件模塊加載SMI MIB模塊定義。這個選項能夠屢次使用,將幾個MIB模塊加載到tcpdump中。

-M     使用secret做爲共享密鑰,用於經過TCP-MD5選項(RFC 2385)驗證TCP段中發現的摘要(若是存在)。

-n     不要將主機地址轉換爲名稱。這能夠用來避免DNS查找。

-NN     不要將協議和端口號等轉換爲名稱。

-N     不要打印主機名的域名限定。例如,若是你給這個標誌,那麼tcpdump將打印「nic」而不是「nic.ddn.mil」。

-O     不要運行數據包匹配代碼優化器。只有當您懷疑優化器中存在錯誤時,這纔是有用的。

-p     不要把界面變成混雜模式。請注意,因爲某些其餘緣由,接口可能處於混雜模式; 所以'-p'不能用做'ether host {local-hw-addr}或ether broadcast'的縮寫。

-q     快(安靜?)輸出。打印較少的協議信息,因此輸出行較短。

-R     假設ESP / AH數據包基於舊規範(RFC1825至RFC1829)。若是指定,tcpdump將不會打印重播預防字段。因爲ESP / AH規範中沒有協議版本字段,所以tcpdump沒法推導出ESP / AH協議的版本。

-r     從文件中讀取數據包(使用-w選項建立)。若是文件是「 - 」,則使用標準輸入。

-S     打印絕對的,而不是相對的TCP序列號。

 

-s     SNARF snaplen有從每一個分組而不是65535個字節的缺省數據的字節。因爲快照有限而截斷的數據包在輸出中用''[|表示 proto ]'',其中proto是發生截斷的協議級別的名稱。請注意,採用較大的快照既增長了處理數據包所需的時間,也有效地減小了數據包緩衝的數量。這可能會致使數據包丟失。您應該將snaplen限制爲捕獲您感興趣的協議信息的最小數目。將snaplen設置爲0會將其設置爲缺省值65535,以便與最近較早版本的tcpdump向後兼容。

 

-T     由「 表達式 」 選擇的強制數據包被解釋爲指定的類型。目前已知的類型是aodv(Ad-hoc按需距離矢量協議),cnfp(Cisco NetFlow協議),rpc(遠程過程調用),rtp(實時應用協議),rtcp (實時應用控制協議)snmp(簡單網絡管理協議),tftp(普通文件傳輸協議),vat(視頻音頻工具)和wb(分佈式白板)。

 

-t     不要在每一個轉儲線上打印時間戳。

-tt    在每一個轉儲線上打印未格式化的時間戳。

-ttt     在每一個轉儲線上打印當前行和前一行之間的增量(微秒分辨率)。

-tttt     在每一個轉儲線上打印默認格式的時間戳,並按日期打印。

-ttttt     在每一個轉儲線上打印當前行和第一行之間的增量(微秒分辨率)。

-u     打印未解碼的NFS句柄。

 

-U     經過-w選項「packet-buffered」 保存輸出; 即當每一個數據包被保存時,它將被寫入輸出文件,而不是僅在輸出緩衝器填充時被寫入。該-U若是標誌將不被支持的tcpdump與舊版本的內置的libpcap是缺少pcap_dump_flush() 函數。

 

-v     解析和打印時,產生(略多)詳細的輸出。例如,打印IP包中的生存時間,標識,總長度和選項。還啓用額外的數據包完整性檢查,例如驗證IP和ICMP頭校驗和。使用-w選項寫入文件時,請每隔10秒報告捕獲的數據包數量。

 

-vv     更詳細的輸出。例如,從NFS回覆數據包打印附加字段,SMB數據包徹底解碼。

-vvv     更詳細的輸出。例如,telnet SB ... SE選項所有打印。使用-X Telnet選項也以十六進制打印。

-w     將原始數據包寫入文件,而不是解析並打印出來。他們之後能夠用-r選項打印。若是文件是「 - 」,則使用標準輸出 。有關文件格式的說明,請參閱pcap-savefile(5)。

 

-W     與-C選項一塊兒使用時,這會將建立的文件數量限制爲指定的數字,並從頭開始覆蓋文件,從而建立「旋轉」緩衝區。另外,它將命名帶有足夠前導0的文件以支持最大數量的文件,使它們可以正確排序。與-G選項一塊兒使用時,這將限制建立的旋轉轉儲文件的數量,在達到限制時以狀態0退出。若是與-C一塊兒使用,則行爲將致使每一個時間片的循環文件。

 

-X     解析和打印時,除了打印每一個數據包的標題外,還要以十六進制格式打印每一個數據包的數據(減去其連接級別標題)。整個數據包或snaplen字節中的較小者將被打印。請注意,這是整個鏈路層數據包,所以對於填充的鏈路層(例如以太網),當高層數據包比所需的填充數據更短時,也會打印填充字節。

 

-xx     解析和打印時,除了打印每一個數據包的標題外,還要以十六進制格式打印每一個數據包的數據,包括其連接級別標題。

-X     解析和打印時,除了打印每一個數據包的標題以外,還要以十六進制和ASCII格式打印每一個數據包的數據(減去其連接級別標題)。這對分析新協議很是方便。

-XX     解析和打印時,除打印每一個數據包的標題外,還要以十六進制和ASCII格式打印每一個數據包的數據,包括其連接級別標題。

-y     設置數據鏈路類型,而捕捉包中使用datalinktype。

 

-z     與-C或-G選項一塊兒使用,這將使tcpdump運行「 命令文件 」,其中文件是每次旋轉後關閉的保存文件。例如,指定-z gzip或-z bzip2將使用gzip或bzip2壓縮每一個保存文件。

  • 請注意,tcpdump將與捕獲並行地運行命令,使用最低優先級,這樣不會干擾捕獲過程。
  • 若是你想使用一個自己帶有標誌或不一樣參數的命令,你老是能夠編寫一個shell腳本,將savefile的名字做爲惟一的參數,使標誌和參數安排並執行你想要的命令。

 

-Z     刪除權限(若是是root)並將用戶標識更改成用戶,將組標識更改成主要用戶組。這種行爲默認是啓用的(-Z tcpdump),能夠經過-Z root來禁用。

表達

  • 選擇將要轉儲的數據包。若是沒有給出表達式,網絡上的全部數據包將被轉儲。不然,只有表達式爲「真」的數據包 纔會被丟棄。
  • 有關表達式語法,請參閱pcap-filter(7)。
  • 能夠將表達式參數做爲單個參數或多個參數傳遞給tcpdump,以較方便的方式傳遞。一般,若是表達式包含Shell元字符,則將其做爲單引號引用傳遞會更容易。在分析以前,多個參數與空格鏈接。

 

示例:

一、打印全部到達或離開sundown的數據包:

tcpdump host sundown

 

二、打印helios和hot或ace之間的流量:

tcpdump host helios and \( hot or ace \)

 

三、要在ace和除helios以外的任何主機之間打印全部IP數據包:

tcpdump ip host ace and not helios

 

四、打印本地主機和Berkeley(伯克利)主機之間的全部流量:

tcpdump net ucb-ether

 

五、要經過Internet網關snup打印全部的ftp流量:(注意表達式被引用來防止shell(錯誤)解釋括號):

tcpdump 'gateway snup and (port ftp or ftp-data)'

 

六、要打印既不是來自本地主機也不是本地主機的流量(若是你是通往另外一個網絡的話,這些東西不該該放到本地網上)。

tcpdump ip and not net localnet

 

七、打印涉及非本地主機的每一個TCP會話的開始和結束數據包(SYN和FIN數據包)。

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'

 

八、打印全部來自端口80的HTTP HTTP數據包,即僅打印包含數據的數據包,而不打印例如SYN和FIN數據包以及ACK數據包。(IPv6是留給讀者的一個練習。)

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

 

九、打印經過網關snup發送的長度超過576字節的IP數據包:

tcpdump 'gateway snup and ip[2:2] > 576'

 

十、要打印未經以太網廣播或多播發送的IP廣播或多播數據包:

tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

 

十一、要打印全部不是回顯請求/回覆的ICMP數據包(即不能ping數據包):

tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

 

1、默認啓動

tcpdump

普通狀況下,直接啓動tcpdump將監視第一個網絡接口上全部流過的數據包。

 

2、監視指定網絡接口的數據包

tcpdump -i eth1

若是不指定網卡,默認tcpdump只會監視第一個網絡接口,通常是eth0,下面的例子都沒有指定網絡接口。

 

3、監視指定主機的數據包

打印全部進入或離開sundown的數據包.

tcpdump host sundown

也能夠指定ip,例如截獲全部192.168.1.120 的主機收到的和發出的全部的數據包

tcpdump host 192.168.1.120 

 

打印helios 與 hot 或者與 ace 之間通訊的數據包

tcpdump host helios and \( hot or ace \)

截獲主機210.27.48.120 和主機192.168.1.110或192.168.1.100的通訊

tcpdump host 192.168.1.120 and \ (192.168.1.110 or 192.168.1.100 \) 

 

打印ace與任何其餘主機之間通訊的IP 數據包, 但不包括與helios之間的數據包.

tcpdump ip host ace and not helios

若是想要獲取主機192.168.1.120除了和主機192.168.1.110以外全部主機通訊的ip包,使用命令:

tcpdump ip host 192.168.1.120 and ! 192.168.1.110

 

截獲主機hostname發送的全部數據

tcpdump -i eth0 src host hostname

監視全部送到主機hostname的數據包

tcpdump -i eth0 dst host hostname

 

4、監視指定主機和端口的數據包

若是想要獲取主機192.168.1.120接收或發出的telnet包,使用以下命令

tcpdump tcp port 23 and host 192.168.1.120

 

對本機的udp 123 端口進行監視 123 爲ntp的服務端口

tcpdump udp port 123

 

5、監視指定網絡的數據包

打印本地主機與Berkeley網絡上的主機之間的全部通訊數據包(nt: ucb-ether, 此處可理解爲'Berkeley網絡'的網絡地址,此表達式最原始的含義可表達爲: 打印網絡地址爲ucb-ether的全部數據包)

tcpdump net ucb-ether

 

打印全部經過網關snup的ftp數據包(注意, 表達式被單引號括起來了, 這能夠防止shell對其中的括號進行錯誤解析)

tcpdump 'gateway snup and (port ftp or ftp-data)'

 

打印全部源地址或目標地址是本地主機的IP數據包(若是本地網絡經過網關連到了另外一網絡, 則另外一網絡並不能算做本地網絡.(nt: 此句翻譯曲折,需補充).localnet 實際使用時要真正替換成本地網絡的名字)

tcpdump ip and not net localnet

 

6、監視指定協議的數據包

打印TCP會話中的的開始和結束數據包, 而且數據包的源或目的不是本地網絡上的主機.(nt: localnet, 實際使用時要真正替換成本地網絡的名字))

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'

 

打印全部源或目的端口是80, 網絡層協議爲IPv4, 而且含有數據,而不是SYN,FIN以及ACK-only等不含數據的數據包.(ipv6的版本的表達式可作練習)

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

(nt: 可理解爲, ip[2:2]表示整個ip數據包的長度, (ip[0]&0xf)<<2)表示ip數據包包頭的長度(ip[0]&0xf表明包中的IHL域, 而此域的單位爲32bit, 要換算成字節數須要乘以4, 即左移2. (tcp[12]&0xf0)>>4 表示tcp頭的長度, 此域的單位也是32bit, 換算成比特數爲 ((tcp[12]&0xf0) >> 4) << 2, 即 ((tcp[12]&0xf0)>>2). ((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0 表示: 整個ip數據包的長度減去ip頭的長度,再減去tcp頭的長度不爲0, 這就意味着, ip數據包中確實是有數據.對於ipv6版本只需考慮ipv6頭中的'Payload Length' 與 'tcp頭的長度'的差值, 而且其中表達方式'ip[]'需換成'ip6[]'.)

 

打印長度超過576字節, 而且網關地址是snup的IP數據包

tcpdump 'gateway snup and ip[2:2] > 576'

 

打印全部IP層廣播或多播的數據包, 但不是物理以太網層的廣播或多播數據報

tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'

 

打印除'echo request'或者'echo reply'類型之外的ICMP數據包( 好比,須要打印全部非ping 程序產生的數據包時可用到此表達式 .(nt: 'echo reuqest' 與 'echo reply' 這兩種類型的ICMP數據包一般由ping程序產生))

tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

 

7、使用tcpdump抓取HTTP包

tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 爲"GET"前兩個字母"GE",0x4854 爲"HTTP"前兩個字母"HT"。

tcpdump 對截獲的數據並無進行完全解碼,數據包內的大部份內容是使用十六進制的形式直接打印輸出的。顯然這不利於分析網絡故障,一般的解決辦法是先使用帶-w參數的tcpdump 截獲數據並保存到文件中,而後再使用其餘程序(如Wireshark)進行解碼分析。固然也應該定義過濾規則,以免捕獲的數據包填滿整個硬盤。

 

tcpdump 與wireshark

Wireshark(之前是ethereal)是Windows下很是簡單易用的抓包工具。但在Linux下很難找到一個好用的圖形化抓包工具。還好有Tcpdump。咱們能夠用Tcpdump + Wireshark 的完美組合實現:在 Linux 裏抓包,而後在Windows 裏分析包。

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -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.0/24

八、-w ./target.cap : 保存成cap文件,方便用wireshark分析

 

輸出格式

tcpdump的輸出是依賴於協議的。如下給出了大多數格式的簡要說明和示例。

 

連接級別Headers

若是給出'-e'選項,則連接級別標題被打印出來。在以太網上,打印源和目標地址,協議和數據包長度。

 

在FDDI網絡上,「-e」選項使tcpdump打印「幀控制」字段,源地址和目標地址以及數據包長度。(「幀控制」字段管理對數據包其他部分的解釋,普通數據包(如包含IP數據報的數據包)是'異步'數據包,優先級值在0到7之間;例如' async4 '。假設數據包包含802.2邏輯鏈路控制(LLC)數據包;若是LLC數據包不是 ISO數據報或所謂的SNAP數據包,則會打印LLC標頭。

 

在令牌環網絡上,「-e」選項使tcpdump打印「訪問控制」和「幀控制」字段,源地址和目標地址以及數據包長度。與在FDDI網絡上同樣,假設數據包含有LLC數據包。不管指定了「-e」選項,源路由信息都將打印爲源路由數據包。

 

在802.11網絡上,「-e」選項使tcpdump打印出「幀控制」字段,802.11報頭中的全部地址和數據包長度。與在FDDI網絡上同樣,假設數據包含有LLC數據包。

 

(注意:如下描述假定熟悉RFC-1144中描述的SLIP壓縮算法。)

 

在SLIP連接上,打印出一個方向指示符(「入站」I「,出站」O「),數據包類型和壓縮信息。數據包類型是首先打印的。這三種類型是ip,utcp和ctcp。沒有進一步的連接信息打印ip數據包。對於TCP數據包,鏈接標識符將按照類型打印。若是數據包是壓縮的,它的編碼頭被打印出來。特殊狀況打印爲 * S + n和* SA + n,其中n是序列號(或序列號和ack)已經改變的量。若是不是特例,則打印零個或多個更改。W(窗口),A(ack),S(序列號)和I(分組ID)指示改變,接着是增量(+ n或-n)或新值(= N)。最後打印數據包中的數據量和壓縮的標題長度。

 

例如,下面的行顯示了一個帶有隱式鏈接標識符的出站壓縮TCP數據包; ack改變了6,序列號改變了49,數據包ID減小了6; 有3個字節的數據和6個字節的壓縮報頭:

O ctcp * A+6 S+49 I+6 3 (6)

 

ARP / RARP包

Arp / rarp輸出顯示請求的類型及其參數。格式的目的是自我解釋。如下是從主機rtsg到主機csam的「rlogin」開始的簡短示例:

arp who-has csam tell rtsg

arp reply csam is-at CSAM

 

第一行說rtsg發送一個arp包,請求互聯網主機csam的以太網地址。Csam以其以太網地址回覆(在這個例子中,以太網地址在大寫字母和互聯網地址小寫)。

 

若是咱們已經完成了tcpdump -n,這看起來不會多餘:

arp who-has 128.3.254.6 tell 128.3.254.68

arp reply 128.3.254.6 is-at 02:07:01:00:01:c4

 

若是咱們已經完成了tcpdump -e,第一個數據包被廣播,第二個數據包是點對點的事實將是可見的:

RTSG Broadcast 0806 64: arp who-has csam tell rtsg

CSAM RTSG 0806 64: arp reply csam is-at CSAM

 

對於第一個數據包來講,以太網源地址是RTSG,目的地是以太網廣播地址,類型字段包含十六進制0806(類型ETHER_ARP),總長度是64字節。

 

TCP數據包

(注意:下面的描述假定你熟悉RFC-793中描述的TCP協議,若是你不熟悉協議,這個描述和tcpdump都不會對你有太大的用處。

 

一個tcp協議的通常格式是:

src > dst: flags data-seqno ack window urgent options

Src和dst是源和目標IP地址和端口。標誌是S(SYN),F(FIN),P(PUSH),R(RST),W(ECN CWR)或E(ECN-Echo)的一些組合,或者一個單獨的'。(沒有標誌)。Data-seqno描述了數據包中數據覆蓋的部分序列空間(見下面的例子)。確認是在該鏈接上指望的另外一個方向的下一個數據的序列號。Window是在此鏈接上可用的接收緩衝區空間的另外一個方向的字節數。Urg表示數據包中有「緊急」數據。選項是用尖括號括起來的tcp選項(例如,<mss 1024>)。

 

Src,dst和標誌老是存在。其餘字段取決於數據包的TCP協議頭的內容,只在適當時輸出。

 

這是從主機rtsg到主機csam的rlogin的開頭部分。

rtsg.1023 > csam.login: S 768512:768512(0) win 4096 <mss 1024>

csam.login > rtsg.1023: S 947648:947648(0) ack 768513 win 4096 <mss 1024>

rtsg.1023 > csam.login: . ack 1 win 4096

rtsg.1023 > csam.login: P 1:2(1) ack 1 win 4096

csam.login > rtsg.1023: . ack 2 win 4096

rtsg.1023 > csam.login: P 2:21(19) ack 1 win 4096

csam.login > rtsg.1023: P 1:2(1) ack 21 win 4077

csam.login > rtsg.1023: P 2:3(1) ack 21 win 4077 urg 1

csam.login > rtsg.1023: P 3:4(1) ack 21 win 4077 urg 1

 

第一行表示rtsg上的tcp端口1023向csam上的端口登陸發送了一個包。在小號代表SYN標誌設置。數據包序號爲768512,不包含數據。(這個符號是「first:last(nbytes)」,意思是「序列號首先到最後一個是用戶數據的nbytes字節」)。沒有捎帶的ack,可用的接收窗口是4096字節,有一個最大段大小選項請求1024個字節的MSS。

 

Csam回覆一個相似的數據包,除了包含rtsg的SYN的背馱式。Rtsg而後aks csam的SYN。'。' 意味着沒有設置標誌。數據包不包含數據,因此沒有數據序列號。請注意,確認序號是一個小整數(1)。tcpdump第一次看到一個tcp「對話」,它打印出來的數據包的序列號。在會話的後續數據包中,打印當前數據包序列號與此初始序列號之間的差別。這意味着在第一個數據流以後的序列號能夠被解釋爲對話數據流中的相對字節位置(每一個方向的第一個數據字節是'1')。「-S」將覆蓋此功能,

 

在第6行,rtsg發送csam 19個字節的數據(在對話的rtsg→csam側的字節2到20)。PUSH標誌被設置在數據包中。在第七行,csam表示它收到了由rtsg發送的數據,但不包括字節21.大部分數據顯然都在套接字緩衝區,由於csam的接收窗口已經減小了19個字節。Csam在這個包中也發送一個字節的數據給rtsg。在第8行和第9行,csam發送緊急的兩個字節的數據到rtsg。

 

若是快照足夠小以致於tcpdump沒有捕獲到完整的TCP報頭,它會盡量多地解釋報頭,而後報告「[| tcp ]「來表示餘數不能被解釋。若是報頭包含一個僞造的選項(一個帶的長度是過小或超過頭的末尾),tcpdump的報告爲「」 [ 壞選擇 ]「」並無解釋任何進一步的選項(由於它是不可能告訴他們在哪裏開始)。若是頭部長度指示存在選項,但IP數據報長度不足以使選項實際存在,則 tcpdump將其報告爲「[ bad hdr length ]」。

 

捕獲特定標誌組合的TCP數據包(SYN-ACK,URG-ACK等)

TCP報頭的控制位部分有8位:

CWR | ECE | URG | ACK | PSH | RST | SYN | FIN

假設咱們想要觀察創建TCP鏈接所使用的數據包。回想一下,當TCP初始化一個新的鏈接時,它使用3-way握手協議; 關於TCP控制位的鏈接順序是

1)調用者發送SYN

2)收件人用SYN,ACK進行響應

3)主叫發送確認

如今咱們有興趣捕獲只包含SYN位的數據包(步驟1)。請注意,咱們不但願步驟2(SYN-ACK)的數據包,只是一個普通的初始SYN。咱們須要的是一個正確的tcpdump過濾器表達式。

 

回想一下沒有選項的TCP頭的結構:

TCP頭的結構

除非有選項,不然TCP頭一般保存20個八位字節的數據。圖的第一行包含八位字節0 - 3,第二行顯示八位字節4-7等。

 

以0開始計數,相關的TCP控制位包含在八位組13中:

TCP控制位包含在八位組13中

 

讓咱們仔細看看八位字節號。13:

八位字節號

 

這些是咱們感興趣的TCP控制位。咱們對這個八位位組中的位從0到7,從右到左編號,因此PSH位是位編號3,而URG位是編號5。

 

回想一下,咱們想要捕獲只有SYN集的數據包。讓咱們來看看若是一個TCP數據報到達,而且在它的頭部設置了SYN位,會發生什麼狀況?

若是一個TCP數據報到達,而且在它的頭部設置了SYN位

 

看看控制位部分,咱們看到只有位1(SYN)被設置。

 

假定八位字節編號13是網絡字節順序中的8位無符號整數,則該八位字節的二進制值是

00000010

其十進制表示是

    7        6        5        4        3        2        1        0

0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 0*2 + 1*2 + 0*2 = 2

 

咱們已經差很少完成了,由於如今咱們知道若是隻設置了SYN,TCP頭中的第13個八位字節的值在網絡字節順序中解釋爲8位無符號整數時,必須是2。

 

這種關係能夠表示爲

tcp[13] == 2

咱們可使用這個表達式做爲tcpdump的過濾器來觀察只有SYN集的數據包:

tcpdump -i xl0 tcp [13] == 2

表達式「讓TCP數據報的第13個八位字節具備十進制值2」,這正是咱們想要的。

 

如今假設咱們須要捕獲SYN數據包,可是咱們並不在意是否同時設置了ACK或其餘TCP控制位。讓咱們來看看當SYN-ACK集合的TCP數據報到達時,發生什麼事情的八位組13:

當SYN-ACK集合的TCP數據報到達時

 

如今bits 1和4被設置在第13個八位字節中。八位組13的二進制值是

00010010

這轉換成十進制

     7       6        5        4        3         2        1        0

0*2 + 0*2 + 0*2 + 1*2 + 0*2 + 0*2 + 1*2 + 0*2 = 18

 

如今咱們不能僅僅在tcpdump過濾器表達式中使用'tcp [13] == 18' ,由於那樣只會選擇那些設置了SYN-ACK的數據包,而不是那些只有SYN設置的數據包。請記住,只要設置了SYN,咱們就不在意是否設置了ACK或任何其餘控制位。

 

爲了實現咱們的目標,咱們須要將八位字節13的二進制值與其餘值進行邏輯與,以保留SYN位。咱們知道咱們但願在任何狀況下都要設置SYN,因此咱們將第13個八位字節的值與SYN的二進制值進行邏輯與:

將第13個八位字節的值與SYN的二進制值進行邏輯與

咱們看到,不管是否設置了ACK或另外一個TCP控制位,該AND操做均可以提供相同的結果。AND值的十進制表示以及此操做的結果是2(二進制00000010),因此咱們知道對於設置了SYN的數據包,如下關係必須爲真:

((八位字節13的值)AND(2))==(2)

這指向了tcpdump過濾器表達式

tcpdump -i xl0'tcp [13]&2 == 2'

請注意,您應該在表達式中使用單引號或反斜槓來從shell中隱藏AND('&')特殊字符。

 

UDP數據包

UDP格式由這個rwho數據包說明:

actinide.who> broadcast.who:udp 84

 

這就是說端口誰主機錒發送一個UDP數據報給端口誰主機廣播,互聯網廣播地址。數據包包含84個字節的用戶數據。

 

某些UDP服務被識別(從源端口號或目標端口號)和打印更高級別的協議信息。特別是域名服務請求(RFC-1034/1035)和Sun RPC調用(RFC-1050)到NFS。

 

UDP名稱服務器請求

(注意:下面的描述假設你熟悉RFC-1035中描述的域服務協議,若是你不熟悉協議,下面的描述將會寫成希臘文。)

 

名稱服務器請求格式爲

src > dst: id op? flags qtype qclass name (len)

h2opolo.1538 > helios.domain: 3+ A? ucbvax.berkeley.edu. (37)

 

主機h2opolo向helios的域名服務器詢問與名稱ucbvax.berkeley.edu相關的地址記錄(qtype = A)。查詢ID是「3」。「+」表示已設置遞歸指望標誌。查詢長度爲37個字節,不包括UDP和IP協議頭。查詢操做是正常的,查詢,因此操做字段被省略。若是操做是其餘任何東西,它將被打印在「3」和「+」之間。相似地,qclass是正常的,C_IN,並被省略。任何其餘qclass將在「A」以後當即打印。

 

檢查了一些異常,並可能致使在方括號內包含額外的字段:若是查詢包含答案,受權記錄或附加記錄部分,則將ancount,nscount或arcount打印爲「[ n a]」,[ n n ]'或'[ n au]',其中n是合適的數量。若是設置了任何響應位(AA,RA或rcode)或任何「必須爲零」位以字節2和3設置,則打印「[b2&3 = x ]」,其中x是十六進制值標題字節二和三。

 

UDP名稱服務器響應

名稱服務器響應格式爲

src > dst: id op rcode flags a/n/au type class data (len)

helios.domain > h2opolo.1538: 3 3/3/7 A 128.32.137.3 (273)

helios.domain > h2opolo.1537: 2 NXDomain* 0/1/0 (97)

 

在第一個例子中,helios響應來自h2opolo的3個答案記錄,3個名稱服務器記錄和7個附加記錄的查詢ID3。第一個答案記錄是A型(地址),其數據是互聯網地址128.32.137.3。響應的總大小爲273字節,不包括UDP和IP標頭。op(查詢)和響應代碼(NoError)與A記錄的類(C_IN)同樣被省略。

 

在第二個例子中,helios以不存在答案的不存在域(NXDomain)的響應代碼對一個查詢2做出響應,一個名稱服務器和沒有權限記錄。'*'表示權威答案位已設置。因爲沒有答案,沒有打印任何類型,類別或數據。

 

其餘可能出現的標誌字符是' - '(遞歸可用,RA,未設置)和'|' (截斷消息,TC,集合)。若是「問題」部分不包含一個條目,則會打印「[ n q]」。

 

SMB / CIFS解碼

tcpdump如今包括對UDP / 137,UDP / 138和TCP / 139數據的至關普遍的SMB / CIFS / NBT解碼。IPX和NetBEUI SMB數據的一些原始解碼也完成了。

 

默認狀況下,進行至關小的解碼,若是使用-v,則執行更詳細的解碼。被警告說,使用-va單個SMB數據包可能會佔用一個或多個頁面,因此只有使用-v時,若是你真的想要全部的細節。

 

有關SMB數據包格式的信息以及全部te字段的含義,請參閱www.cifs.org或您最喜好的samba.org鏡像站點上的pub / samba / specs /目錄。SMB補丁由Andrew Tridgell編寫。

 

NFS請求和回覆

Sun NFS(網絡文件系統)請求和答覆打印爲:

src.xid > dst.nfs: len op args

src.nfs > dst.xid: reply stat len op results

 

sushi.6709 > wrl.nfs: 112 readlink fh 21,24/10.73165

wrl.nfs > sushi.6709: reply ok 40 readlink "../var"

sushi.201b > wrl.nfs:

144 lookup fh 9,74/4096.6878 "xcolors"

wrl.nfs > sushi.201b:

reply ok 128 lookup fh 9,74/4134.3150

 

在第一行中,主持人sushi發送一個id爲6709的事務給wrl(注意src主機後面的數字是一個事務id, 而不是源端口)。請求是112個字節,不包括UDP和IP頭。該操做是文件句柄(fh)21,24 / 10.731657119 上的readlink(讀取符號連接)。(若是幸運的話,在這種狀況下,文件句柄能夠被解釋爲一個主要的,次要的設備號碼對,接着是inode號碼和世代號碼。)Wrl用連接的內容回答「ok」。

 

在第三行,壽司問WRL查找名稱「 xcolors 」在目錄文件9,74 / 4096.6878。請注意,打印的數據取決於操做類型。若是與NFS協議規範一塊兒閱讀,格式的目的是自我解釋。

 

若是給出-v(詳細)標誌,則會打印附加信息。例如:

sushi.1372a > wrl.nfs:

148 read fh 21,11/12.195 8192 bytes @ 24576

wrl.nfs > sushi.1372a:

reply ok 1472 read REG 100664 ids 417/0 sz 29388

 

(-v也打印IP頭TTL,ID,長度和分段字段,在這個例子中已經省略了)。在第一行中,壽司要求 wrl從文件21,11 / 12.195讀取8192個字節,字節偏移量24576. WRL回覆'OK'; 在第二行顯示的數據包是答覆的第一個片斷,所以只有1472字節長(其餘字節將在隨後的片斷中,但這些片斷沒有NFS甚至UDP頭,所以可能不會被打印,取決於所使用的過濾表達式)。因爲給出了-v標誌,所以將打印一些文件屬性(除文件數據外還返回):文件類型(常規文件的「REG」),文件模式(八進制) uid和gid以及文件大小。

 

若是-v標誌被給出不止一次,則會打印更多的細節。

 

請注意,NFS請求很是大,除非增長snaplen,不然不會打印大部分細節。嘗試使用' -s 192 '來觀察NFS流量。

 

NFS回覆數據包不顯式標識RPC操做。相反,tcpdump會跟蹤「最近」的請求,並將它們與使用事務ID的回覆進行匹配。若是答覆沒有嚴格遵循相應的請求,則可能沒法解析。

 

AFS請求和答覆

Transarc AFS(Andrew文件系統)請求和答覆打印爲:

src.sport > dst.dport: rx packet-type

src.sport > dst.dport: rx packet-type service call call-name args

src.sport > dst.dport: rx packet-type service reply call-name args

 

elvis.7001 > pike.afsfs:

rx data fs call rename old fid 536876964/1/1 ".newsrc.new"

new fid 536876964/1/1 ".newsrc"

pike.afsfs > elvis.7001: rx data fs reply rename

 

在第一行中,主機elvis發送一個RX數據包給派克。這是一個到fs(fileserver)服務的RX數據包,而且是RPC調用的開始。RPC調用是重命名,舊的目錄文件ID爲536876964/1/1,舊的文件名爲「.newsrc.new」,新的目錄文件ID爲536876964/1/1,新的文件名爲「。 newsrc」。主機pike響應重命名調用的RPC回覆(這是成功的,由於它是一個數據包,而不是一個停止包)。

 

通常來講,全部的AFS RPC至少被RPC調用名稱解碼。大多數AFS RPC至少有一些解碼的參數(一般只有「有趣的」參數,對某些有趣的定義)。

 

該格式旨在自我描述,但對於不熟悉AFS和RX工做的人可能不會有用。

 

若是-v(詳細)標誌被賦予兩次,則會打印確認包和附加標題信息,例如RX呼叫ID,呼叫號碼,序列號,序列號和RX包標誌。

 

若是給出-v標誌兩次,則會打印附加信息,例如RX呼叫ID,序列號和RX包標誌。MTU協商信息也從RX ack數據包打印。

 

若是-v標誌被給出三次,則打印安全索引和服務標識。

 

錯誤代碼被打印用於停止數據包,除了Ubik信標數據包外(由於停止數據包用於表示對Ubik協議是確定的投票)。

 

請注意,AFS請求很是大,除非增長snaplen,不然許多參數將不會被打印。嘗試使用「 -s 256 」來觀看AFS流量。

 

AFS應答包不明確地標識RPC操做。相反,tcpdump跟蹤「最近」的請求,並使用電話號碼和服務ID將它們與答覆進行匹配。若是答覆沒有嚴格遵循相應的請求,則可能沒法解析。

 

KIP AppleTalk(UDP中的DDP)

將封裝在UDP數據報中的AppleTalk DDP數據包解封裝並做爲DDP數據包轉儲(即丟棄全部的UDP報頭信息)。文件/etc/atalk.names用於將AppleTalk網絡和節點號碼轉換爲名稱。這個文件中的行有表格

number       name

1.254            ether

16.1              icsd-net

1.254.110      ace

 

前兩行給出了AppleTalk網絡的名稱。第三行給出了一個特定主機的名稱(主機與網絡中的第三個八位字節相區別 - 網絡號必須有兩個八位字節,而主機號必須有三個八位字節)。數字和名稱應該分開由空白(空格或製表符)。該/etc/atalk.names文件可能包含空行或註釋行(開始用「#」)。

 

AppleTalk地址打印在窗體中

net.host.port

 

144.1.209.2 > icsd-net.112.220

office.2 > icsd-net.112.220

jssmag.149.235 > icsd-net.2

 

(若是/etc/atalk.names不存在或不包含某個AppleTalk主機/網絡號的條目,則以數字形式打印地址。)在第一個示例中,網絡上的NBP(DDP端口2)144.1節點209正在向正在監聽網絡icsd節點112的端口220上的任何節點發送信息。第二行是相同的,除了源節點的全名是已知的(「辦公室」)。第三行是從網絡jssmag節點149上的端口235發送到icsd-net NBP端口上的廣播(注意,廣播地址(255)由沒有主機號碼的網絡名稱指示 - 所以,這是一個好主意保持/etc/atalk.names中的節點名和網名不一樣)。

 

NBP(名稱綁定協議)和ATP(AppleTalk事務協議)數據包解釋了其內容。其餘協議只是轉儲協議名稱(或數字,若是沒有名稱是協議註冊)和數據包大小。

 

NBP數據包的格式以下例所示:

icsd-net.112.220 > jssmag.2: nbp-lkup 190: "=:LaserWriter@*"

jssmag.209.2 > icsd-net.112.220: nbp-reply 190: "RM1140:LaserWriter@*" 250

techpit.2 > icsd-net.112.220: nbp-reply 190: "techpit:LaserWriter@*" 186

 

第一行是由網絡主機112發送的在網絡jssmag上廣播的激光寫入器的名稱查詢請求。查找的nbp id是190.第二行顯示來自主機jssmag.209的這個請求(注意它具備相同的id)的回覆,表示它具備在端口250上註冊的名爲「RM1140」的laserwriter資源。第三行是另外一個答覆相同的請求說,主機techpit有激光寫做「techpit」186端口註冊。

 

ATP數據包格式化由如下示例演示:

jsmag.209.165> helios.132:atp-req 12266 <0-7> 0xae030001

helios.132> jssmag.209.165:atp-resp 12266:0(512)0xae040000

helios.132> jssmag.209.165:atp-resp 12266:1 (512)0xae040000

helios.132> jssmag.209.165:atp-resp 12266:2(512)0xae040000

helios.132> jssmag.209.165:atp-resp 12266:3(512)0xae040000

helios.132> jssmag.209.165:atp- (512)0xae040000

helios.132> jssmag.209.165:atp-resp 12266:5(512)0xae040000

helios.132> jssmag.209.165:atp-resp 12266:6(512)0xae040000

helios.132> jssmag。 209 512:atp-resp * 12266:7(512)0xae040000

jssmag.209.165> helios.132:atp-req 12266 <3,5> 0xae030001

helios.132> jssmag.209.165:atp-resp 12266:3(512)0xae040000

helios.132> jssmag.209.165:atp-resp 12266:5(512)0xae040000

jssmag.209.165> helios.132:atp-rel 12266 <0-7> 0xae030001

jssmag.209.133> helios.132:atp-req * 12267 < 0-7> 0xae030002

 

Jssmag.209經過請求多達8個數據包('<0-7>')來啓動與主機helios的事務ID 12266。行尾的十六進制數字是請求中'userdata'字段的值。

 

Helios響應8個512字節的數據包。交易ID後面的「:digit」給出了交易中的分組序列號,parens中的數字是分組中的數據量,不包括atp頭。數據包7上的「*」表示EOM位已設置。

 

而後Jssmag.209請求重傳分組3和5。Helios從新發送它們,而後jssmag.209釋放事務。最後,jssmag.209發起下一個請求。請求中的「*」表示XO('恰好一次')未被設置。

 

IP碎片

碎片化的Internet數據報被打印爲

(frag id:size@offset+)

(frag id:size@offset)

 

(第一種形式表示有更多的片斷,第二種表示這是最後一個片斷。)

 

Id是片斷ID。大小是不包括IP頭的片斷大小(以字節爲單位)。偏移量是原始數據報中該片斷的偏移量(以字節爲單位)。

 

片斷信息爲每一個片斷輸出。第一個片斷包含更高級別的協議頭,而且在協議信息以後打印片斷信息。第一個片斷以後的碎片不包含更高級別的協議頭,而且在源地址和目的地址以後打印碎片信息。例如,這裏是一個從arizona.edu到lbl-rtsg.arpa的ftp的一部分,經過一個CSNET鏈接,看起來不處理576字節的數據報:

arizona.ftp-data > rtsg.1170: . 1024:1332(308) ack 1 win 4096 (frag 595a:328@0+)

arizona > rtsg: (frag 595a:204@328)

rtsg.1170 > arizona.ftp-data: . ack 1536 win 2560

 

這裏有幾點須要注意:首先,第二行的地址不包含端口號。這是由於TCP協議信息所有在第一個片斷中,咱們不知道打印後面的片斷時端口或序列號是什麼。其次,打印第一行的tcp序列信息時,若是有308字節的用戶數據,實際上有512字節(第一個碎片308,第二個碎片204)。若是您正在尋找序列空間中的空洞,或試圖將數據與數據包進行匹配,這可能會欺騙您。

 

具備IP 不分段標誌的分組標記有尾隨(DF)。

 

時間戳

默認狀況下,全部輸出行都有一個時間戳記。時間戳是表單中的當前時鐘時間

hh:mm:ss.frac

 

和內核的時鐘同樣精確。時間戳反映了內核第一次看到數據包的時間。沒有嘗試去考慮以太網接口從有線鏈接中刪除數據包和內核服務於「新數據包」中斷之間的時間間隔。

相關文章
相關標籤/搜索