一:命令介紹:
tcpdump,用簡單的語言概括就是dump the traffic on a network,是一個運行在linux平台可以根據使用者需求對網絡上傳輸的數據包進行捕獲的抓包工具,windows平台有sniffer等工具,tcpdump可以將網絡中傳輸的數據包的“包頭”全部捕獲過來進程分析,其支持網絡層、特定的傳輸協議、數據發送和接收的主機、網卡和端口的過濾,並提供and、or、not等語句進行邏輯組合捕獲數據包或去掉不用的信息。
1:命令選項和捕獲主機對到主機的數據包:
1.1:命令選項:
-a #將網絡地址和廣播地址轉變成名字 -A #以ASCII格式打印出所有分組,並將鏈路層的頭最小化 -b #數據鏈路層上選擇協議,包括ip/arp/rarp/ipx都在這一層 -c #指定收取數據包的次數,即在收到指定數量的數據包后退出tcpdump -d #將匹配信息包的代碼以人們能夠理解的匯編格式輸出 -dd #將匹配信息包的代碼以c語言程序段的格式輸出 -ddd #將匹配信息包的代碼以十進制的形式輸出 -D #打印系統中所有可以監控的網絡接口 -e #在輸出行打印出數據鏈路層的頭部信息 -f #將外部的Internet地址以數字的形式打印出來,即不顯示主機名 -F #從指定的文件中讀取表達式,忽略其他的表達式 -i #指定監聽網絡接口 -l #使標准輸出變為緩沖形式,可以數據導出到文件 -L #列出網絡接口已知的數據鏈路 -n #不把網絡地址轉換為名字 -N 不輸出主機名中的域名部分,例如www.baidu.com只輸出www -nn #不進行端口名稱的轉換 -P #不將網絡接口設置為混雜模式 -q #快速輸出,即只輸出較少的協議信息 -r #從指定的文件中讀取數據,一般是-w保存的文件 -w #將捕獲到的信息保存到文件中,且不分析和打印在屏幕 -s #從每個組中讀取在開始的snaplen個字節,而不是默認的68個字節 -S #將tcp的序列號以絕對值形式輸出,而不是相對值 -T #將監聽到的包直接解析為指定的類型的報文,常見的類型有rpc(遠程過程調用)和snmp(簡單網絡管理協議) -t #在輸出的每一行不打印時間戳 -tt #在每一行中輸出非格式化的時間戳 -ttt #輸出本行和前面以后之間的時間差 -tttt #在每一行中輸出data處理的默認格式的時間戳 -u #輸出未解碼的NFS句柄 -v #輸出稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息 -vv#輸出相信的保報文信息
1.1.1:#tcpdump的表達式:
表達式是一個正則表達式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表達式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網絡上所有的信息包 將會被截獲,在表達式中一般如下幾種類型的關鍵字:
a):關於數據類型的關鍵字:
包括host、port、net,例如host 192.168.1.1表示這是一台主機,net 192.168.0.0表示這是一個網絡地址,port 22指明端口號是22,如果沒有指明類型,則默認的類型是host。
b):數據傳輸方向的關鍵字:
包括src、dst、dst or src、dst and src,這些關鍵字指明了傳輸的方向,比如src 192.168.1.1說明數據包源地址是192.168.1.1,dst net 192.168.0.0指明目的網絡地址是192.168.0.0,默認是監控主機對主機的src和dst,即默認監聽本機和目標主機的所有數據。
c):協議關鍵字:
包括ip、arp、rarp、tcp、udp等,
d):其他關鍵字:
運算類型的:or、and、not、!
輔助功能型的:gateway、less、broadcast、greater
1.2:# tcpdump 默認捕獲方式
#默認監聽在第一塊網卡上,監聽所有經過此網卡通過的數據包
1.3:# tcpdump -i eth0 監聽指定網卡eth0的所有傳輸數據包:
1.4:#tcpdump -i eth0 host 192.168.56.1 #捕獲主機192.168.56.1經過本機網卡eth0的所有數據包(也可以是主機名,但要求可以解析出來IP地址)
1.5:#tcpdump host 192.168.56.209 and \( 192.168.56.210 or 192.168.56.211 \) #捕獲主機 192.168.56.209 和主機192.168.56.210或192.168.56.211的所有通信數據包
1.6:#tcpdump ip host node9 and not www.baidu.com #捕獲主機node9與其他主機之間(不包括www.baidu.com)通信的ip數據包
1.7:#tcpdump ip host node9 and ! www.baidu.com #捕獲node9與其他所有主機的通信數據包(不包括www.baidu.com)
1.8:#tcpdump -i eth0 src node10 #捕獲源主機node10發送的所有的經過eth0網卡的所有數據包
1.9:##tcpdump -i eth0 dst host www.baidu.com #捕獲所有發送到主機www.baidu.com的數據包
1.9.1:監聽主機192.168.56.1和192.168.56.210之間ip協議的80端口的且排除www.baidu.com通信的所有數據包:
# tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! www.baidu.com #也可以寫成tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host not www.baidu.com,即not和!都是相同的取反的意思
1.9.2:捕獲arp的協議數據包:
#tcpdump arp #監控指定主機的通信數據包與1.9.1方式相同
2:捕獲指定主機和端口的數據包:
2.1:#tcpdump tcp port 22 and host 192.168.56.210 #捕獲主機192.168.56.210接收和發出的tcp協議的ssh的數據包:
2.2:# tcpdump udp port 53 #監聽本機udp的53端口的數據包,udp是dns協議的端口,這也是一個dns域名解析的完整過程
總結:tcpdump的語法類似於mysql查詢語句,可以指定各種查詢的條件進行組合,還可以進行與或非的條件判斷進行更精確的數據搜集,語法如下:
#tcpdump [協議類型] [源或目標] [主機名稱或IP] [or/and/not/!條件組合] [源或目標] [主機名或IP] [or/and/not/!條件組合] [端口] [端口號] …… [or/and/not/!條件組合] [條件]
#tcpdump ip dst 192.168.56.1 and src 192.168.56.210 and port 80 and host ! www.baidu.com