查看路由表
ip route
route -n
netstat -rnnode
使用nc掃描端口
nc又叫netcat,能夠
使用netcat肯定TCP端口的有效性:
nc -nv -w 2 -z x.x.x.x 3799
nc -nv -w 2 -z x.x.x.x 1-1024linux
使用netcat肯定UDP端口的有效性:
nc -nvu -w 2 -z x.x.x.x 3799
nc -nvu -w 2 x.x.x.x 1-1024
或者
nc-vuz x.x.x.x 3799ios
掃描TCP的指定端口範圍
nmap -v -sT x.x.x.x -p 1577
nmap -v -sT x.x.x.x -p 1577,1578
nmap -v -sT x.x.x.x -p 1500-1600正則表達式
nmap -v -Pn x.x.x.x -p 80算法
1)、snmpwalk -c public -v 1 -m ALL 10.0.1.52 .1.3.6.1.2.1.25.1 獲得取得windows端的系統進程用戶數等windows
2)、snmpwalk -c public -v 1 -m ALL 10.0.1.52 .1.3.6.1.2.1.25.2.2 取得系統總內存緩存
3)、snmpwalk -c public -v 1 -m ALL 10.0.1.52 hrSystemNumUsers 取得系統用戶數安全
4)、snmpwalk -c public -v 1 -m ALL 10.0.1.52 .1.3.6.1.2.1.4.20 取得IP信息服務器
5)、snmpwalk -v 2c -c public 10.0.1.52 system 查看系統信息網絡
6)、snmpwalk -v 1 10.0.1.52 -c public ifDescr 獲取網卡信息
7)、snmpwalk -v 2c -c public 10.0.1.52 .1.3.6.1.2.1.25.1 獲得取得windows端的系統進程用戶數等
其中-v是指版本,-c 是指密鑰。
snmpwalk功能不少,能夠獲取系統各類信息,只要更改後面的信息類型便可。若是不知道什麼類型,也能夠不指定,這樣全部系統信息都獲取到:
snmpwalk -v 2c -c public 10.0.1.52
snmpwalk必須帶-v,-c參數,缺一個都不成
snmpwalk -v 2c -c Dx23Wk8L 211.139.22.222 1.3.6.1.4.1.3902.1006.1.1.1.2.1.1.1
SNMPv2-SMI::enterprises.3902.1006.1.1.1.2.1.1.1 = No Such Object available on this agent at this OID
snmpwalk -v 2c -c Dx23Wk8L 183.224.66.195 1.3.6.1.4.1.3902.3.6008.2.1.1
SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.1.5.67.116.116.121.110 = STRING: "Cttyn"
SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.1.5.67.109.110.101.116 = STRING: "Cmnet"
Error: OID not increasing: SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.1.5.67.116.116.121.110
= SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.1.5.67.109.110.101.116
snmpwalk -v 2c -c Dx23Wk8L 183.224.66.195 1.3.6.1.4.1.3902.3.6008.2.1.1.1.2
SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.2.5.67.116.116.121.110 = INTEGER: 2545
SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.2.5.67.109.110.101.116 = INTEGER: 5090
Error: OID not increasing: SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.2.5.67.116.116.121.110
= SNMPv2-SMI::enterprises.3902.3.6008.2.1.1.1.2.5.67.109.110.101.116
//採用對樹的深度優先遍歷算法。命令不給出OID則從root,根開始。給出一個OID以下,則以1.3.6.1.4.1.3902.1006爲根開始遍歷相應的子樹。
snmpwalk -v 2c -c Dx23Wk8L 211.139.22.222 1.3.6.1.4.1.3902.1006
SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.80.80.80.111.69.45.80.111.111.108.45.49.255.255.118.98.117.105.49.48.255.10.167839746 = STRING: "PPPoE-Pool-1"
SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.80.80.80.111.69.45.80.111.111.108.45.50.255.255.118.98.117.105.49.48.255.11.167840258 = STRING: "PPPoE-Pool-2"
SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.118.105.112.95.112.111.111.108.95.49.255.255.118.98.117.105.49.48.255.12.167840770 = STRING: "vip_pool_1"
SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.118.105.112.95.112.111.111.108.95.54.255.255.118.98.117.105.49.48.255.17.167841794 = STRING: "vip_pool_6"
SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.118.105.112.95.112.111.111.108.95.50.255.255.118.98.117.105.49.48.255.13.167842306 = STRING: "vip_pool_2"
Error: OID not increasing: SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.118.105.112.95.112.111.111.108.95.54.255.255.118.98.117.105.49.48.255.17.167841794
= SNMPv2-SMI::enterprises.3902.1006.1.1.2.1.1.1.118.105.112.95.112.111.111.108.95.50.255.255.118.98.117.105.49.48.255.13.167842306
TCPdump抓包命令
tcpdump是一個用於截取網絡分組,並輸出分組內容的工具。tcpdump憑藉強大的功能和靈活的截取策略,使其成爲類UNIX系統下用於網絡分析和問題排查的首選工具。
tcpdump提供了源代碼,公開了接口,所以具有很強的可擴展性,對於網絡維護和入侵者都是很是有用的工具。tcpdump存在於基本的Linux系統中,
因爲它須要將網絡界面設置爲混雜模式,普通用戶不能正常執行,但具有root權限的用戶能夠直接執行它來獲取網絡上的信息。
所以系統中存在網絡分析工具主要不是對本機安全的威脅,而是對網絡上的其餘計算機的安全存在威脅。
1、概述
顧名思義,tcpdump能夠將網絡中傳送的數據包的「頭」徹底截獲下來提供分析。
它支持針對網絡層、協議、主機、網絡或端口的過濾,並提供and、or、not等邏輯語句來幫助你去掉無用的信息。
引用
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:53:21.444591 IP (tos 0x10, ttl 64, id 19324, offset 0, flags [DF], proto 6, length: 92) asptest.localdomain.ssh > 192.168.228.244.1858: P 3962132600:3962132652(52) ack 2726525936 win 1266
asptest.localdomain.1077 > 192.168.228.153.domain: [bad udp cksum 166e!] 325+ PTR? 244.228.168.192.in-addr.arpa. (46)
11:53:21.446929 IP (tos 0x0, ttl 64, id 42911, offset 0, flags [DF], proto 17, length: 151) 192.168.228.153.domain > asptest.localdomain.1077: 325 NXDomain q: PTR? 244.228.168.192.in-addr.arpa. 0/1/0 ns: 168.192.in-addr.arpa. (123)
11:53:21.447408 IP (tos 0x10, ttl 64, id 19328, offset 0, flags [DF], proto 6, length: 172) asptest.localdomain.ssh > 192.168.228.244.1858: P 168:300(132) ack 1 win 1266
347 packets captured
1474 packets received by filter
745 packets dropped by kernel
不帶參數的tcpdump會收集網絡中全部的信息包頭,數據量巨大,必須過濾。
2、選項介紹
引用
-A 以ASCII格式打印出全部分組,並將鏈路層的頭最小化。
-c 在收到指定的數量的分組後,tcpdump就會中止。
-C 在將一個原始分組寫入文件以前,檢查文件當前的大小是否超過了參數file_size 中指定的大小。若是超過了指定大小,則關閉當前文件,而後在打開一個新的文件。參數 file_size 的單位是兆字節(是1,000,000字節,而不是1,048,576字節)。
-d 將匹配信息包的代碼以人們可以理解的彙編格式給出。
-dd 將匹配信息包的代碼以c語言程序段的格式給出。
-ddd 將匹配信息包的代碼以十進制的形式給出。
-D 打印出系統中全部能夠用tcpdump截包的網絡接口。
-e 在輸出行打印出數據鏈路層的頭部信息。
-E 用spi@ipaddr algo:secret解密那些以addr做爲地址,而且包含了安全參數索引值spi的IPsec ESP分組。
-f 將外部的Internet地址以數字的形式打印出來。
-F 從指定的文件中讀取表達式,忽略命令行中給出的表達式。
-i 指定監聽的網絡接口。
-l 使標準輸出變爲緩衝行形式,能夠把數據導出到文件。
-L 列出網絡接口的已知數據鏈路。
-m 從文件module中導入SMI MIB模塊定義。該參數能夠被使用屢次,以導入多個MIB模塊。
-M 若是tcp報文中存在TCP-MD5選項,則須要用secret做爲共享的驗證碼用於驗證TCP-MD5選選項摘要(詳情可參考RFC 2385)。
-b 在數據-鏈路層上選擇協議,包括ip、arp、rarp、ipx都是這一層的。
-n 不把網絡地址轉換成名字。
-nn 不進行端口名稱的轉換。
-N 不輸出主機名中的域名部分。例如,‘nic.ddn.mil‘只輸出’nic‘。
-t 在輸出的每一行不打印時間戳。
-O 不運行分組分組匹配(packet-matching)代碼優化程序。
-P 不將網絡接口設置成混雜模式。
-q 快速輸出。只輸出較少的協議信息。
-r 從指定的文件中讀取包(這些包通常經過-w選項產生)。
-S 將tcp的序列號以絕對值形式輸出,而不是相對值。
-s 從每一個分組中讀取最開始的snaplen個字節,而不是默認的68個字節。
-T 將監聽到的包直接解釋爲指定的類型的報文,常見的類型有rpc遠程過程調用)和snmp(簡單網絡管理協議;)。
-t 不在每一行中輸出時間戳。
-tt 在每一行中輸出非格式化的時間戳。
-ttt 輸出本行和前面一行之間的時間差。
-tttt 在每一行中輸出由date處理的默認格式的時間戳。
-u 輸出未解碼的NFS句柄。
-v 輸出一個稍微詳細的信息,例如在ip包中能夠包括ttl和服務類型的信息。
-vv 輸出詳細的報文信息。
-w 直接將分組寫入文件中,而不是不分析並打印出來。
3、tcpdump的表達式介紹
表達式是一個正則表達式,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。
第二種是肯定傳輸方向的關鍵字,主要包括src,dst,dst or src,dst and src,
這些關鍵字指明瞭傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0
指明目的網絡地址是202.0.0.0。若是沒有指明 方向關鍵字,則缺省是src or dst關鍵字。
第三種是協議的關鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。
Fddi指明是在FDDI (分佈式光纖數據接口網絡)上的特定的網絡協議,實際上它是」ether」的別名,
fddi和ether 具備相似的源地址和目的地址,因此能夠將fddi協議包看成ether的包進行處理和分析。
其餘的幾個關鍵字就是指明瞭監聽的包的協議內容。若是沒有指定任何協議,則tcpdump 將會 監聽全部協議的信息包。
除了這三種類型的關鍵字以外,其餘重要的關鍵字以下:gateway, broadcast,less, greater,
還有三種邏輯運算,取非運算是 ‘not ' '! ‘, 與運算是’and’,’&&';或運算是’or’ ,’||’;
這些關鍵字能夠組合起來構成強大的組合條件來知足人們的須要。
4、輸出結果介紹
下面咱們介紹幾種典型的tcpdump命令的輸出信息
(1) 數據鏈路層頭信息
使用命令:
ICE 是一臺裝有linux的主機。它的MAC地址是0:90:27:58:AF:1A H219是一臺裝有Solaris的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。
(2) ARP包的tcpdump輸出信息
使用命令:
獲得的輸出結果是:
引用
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地址。
(3) 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是選項。
(4) UDP包的輸出信息
用tcpdump捕獲的UDP包的通常輸出信息是:
引用
route.port1 > ICE.port2: udp lenth
UDP十分簡單,上面的輸出行代表從主機route的port1端口發出的一個UDP報文 到主機ICE的port2端口,
類型是UDP, 包的長度是lenth。
5、舉例
(1) 想要截獲全部210.27.48.1 的主機收到的和發出的全部的分組:
(2) 想要截獲主機210.27.48.1 和主機210.27.48.2或210.27.48.3的通訊,使用命令(注意:括號前的反斜槓是必須的):
(3) 若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
(4) 若是想要獲取主機192.168.228.246接收或發出的ssh包,而且不轉換主機名使用以下命令:
(5) 獲取主機192.168.228.246接收或發出的ssh包,並把mac地址也一同顯示:
(6) 過濾的是源主機爲192.168.0.1與目的網絡爲192.168.0.0的報頭:
tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24
(7) 過濾源主機物理地址爲XXX的報頭:
tcpdump ether src 00:50:04:BA:9B and dst……
(爲何ether src後面沒有host或者net?物理地址固然不可能有網絡嘍)。
(8) 過濾源主機192.168.0.1和目的端口不是telnet的報頭,並導入到tes.t.txt文件中:
Tcpdump src host 192.168.0.1 and dst port not telnet -l > test.txt
ip icmp arp rarp 和 tcp、udp、icmp這些選項等都要放到第一個參數的位置,用來過濾數據報的類型。
tcpdump採用命令行方式,它的命令格式爲:
tcpdump [-nn] [-i 接口] [-w 儲存檔名] [-c 次數] [-Ae]
[-qX] [-r 文件] [所欲捕獲的數據內容]
參數:
-nn,直接以 IP 及 Port Number 顯示,而非主機名與服務名稱。
-i,後面接要「監聽」的網絡接口,例如 eth0, lo, ppp0 等等的接口。
-w,若是你要將監聽所得的數據包數據儲存下來,用這個參數就對了。後面接文件名。
-c,監聽的數據包數,若是沒有這個參數, tcpdump 會持續不斷的監聽,
直到用戶輸入 [ctrl]-c 爲止。
-A,數據包的內容以 ASCII 顯示,一般用來捉取 WWW 的網頁數據包資料。
-e,使用資料鏈接層 (OSI 第二層) 的 MAC 數據包數據來顯示。
-q,僅列出較爲簡短的數據包信息,每一行的內容比較精簡。
-X,能夠列出十六進制 (hex) 以及 ASCII 的數據包內容,對於監聽數據包內容頗有用。
-r,從後面接的文件將數據包數據讀出來。那個「文件」是已經存在的文件,
而且這個「文件」是由 -w 所製做出來的。
所欲捕獲的數據內容:咱們能夠專門針對某些通訊協議或者是 IP 來源進行數據包捕獲。
那就能夠簡化輸出的結果,並取得最有用的信息。常見的表示方法有。
'host foo', 'host 127.0.0.1' :針對單臺主機來進行數據包捕獲。
'net 192.168' :針對某個網段來進行數據包的捕獲。
'src host 127.0.0.1' 'dst net 192.168':同時加上來源(src)或目標(dst)限制。
'tcp port 21':還能夠針對通訊協議檢測,如tcp、udp、arp、ether 等。
除了這三種類型的關鍵字以外,其餘重要的關鍵字以下:gateway, broadcast,less,
greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'o
r' ,'||';
範例一:以 IP 與 Port Number 捉下 eth0 這個網卡上的數據包,持續 3 秒
[root@linux ~]# tcpdump -i eth0 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 116:232(116) ack 1 win
9648
01:33:40.41 IP 192.168.1.100.22 > 192.168.1.11.1190: P 232:364(132) ack 1 win
9648
<==按下 [ctrl]-c 以後結束
6680 packets captured <==捉取下來的數據包數量
14250 packets received by filter <==由過濾所得的總數據包數量
7512 packets dropped by kernel <==被核心所丟棄的數據包
至於那個在範例一所產生的輸出中,咱們能夠大概區分爲幾個字段,現以範例一當中那行特殊字體行來講明一下:
· 01:33:40.41:這個是此數據包被捕獲的時間,「時:分:秒」的單位。
· IP:經過的通訊協議是IP。
· 192.168.1.100.22>:傳送端是192.168.1.100這個IP,而傳送的Port Number爲22,那個大於(>)的符號指的是數據包的傳輸方向。
· 192.168.1.11.1190:接收端的IP是192.168.1.11,且該主機開啓port 1190來接收。
· P 116:232(116):這個數據包帶有PUSH的數據傳輸標誌,且傳輸的數據爲總體數據的116~232 Byte,因此這個數據包帶有116 Bytes的數據量。
· ack 1 win 9648:ACK與Window size的相關資料。
最簡單的說法,就是該數據包是由192.168.1.100傳到192.168.1.11,經過的port是由22到1190,且帶有116 Bytes的數據量,
使用的是PUSH的標記,而不是SYN之類的主動聯機標誌。
接下來,在一個網絡狀態很忙的主機上面,你想要取得某臺主機對你聯機的數據包數據時,使用tcpdump配合管線命令與正則表達式也能夠,
不過,畢竟很差捕獲。咱們能夠經過tcpdump的表達式功能,就可以輕易地將所須要的數據獨立的取出來。在上面的範例一當中,
咱們僅針對eth0作監聽,因此整個eth0接口上面的數據都會被顯示到屏幕上,但這樣很差分析,能夠簡化嗎?例如,只取出port 21的聯機數據包,能夠這樣作:
[root@linux ~]# tcpdump -i eth0 -nn port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
01:54:37.96 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 1 win 65535
01:54:37.96 IP 192.168.1.100.21 > 192.168.1.11.1240:P 1:21(20) ack 1 win 5840
01:54:38.12 IP 192.168.1.11.1240 > 192.168.1.100.21:. ack 21 win 65515
01:54:42.79 IP 192.168.1.11.1240 > 192.168.1.100.21:P 1:17(16) ack 21 win 65515
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: . ack 17 win 5840
01:54:42.79 IP 192.168.1.100.21 > 192.168.1.11.1240: P 21:55(34) ack 17 win 5840
看!這樣就僅取出port 21的信息,若是仔細看的話,你會發現數據包的傳遞都是雙向的,Client端發出請求而Server端則予以響應,
因此,固然是有去有回了。而咱們也就能夠通過這個數據包的流向來了解到數據包運動的過程了。例如:
· 咱們先在一個終端機窗口輸入「tcpdump-i lo-nn」的監聽。
· 再另開一個終端機窗口來對本機(127.0.0.1)登陸「ssh localhost」,那麼輸出的結果會是如何?
[root@linux ~]# tcpdump -i lo -nn
1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
2 listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
3 11:02:54.253777 IP 127.0.0.1.32936 >
127.0.0.1.22: S 933696132:933696132(0)
win 32767
4 11:02:54.253831 IP 127.0.0.1.22 > 127.0.0.1.32936:
S 920046702:920046702(0)
ack 933696133 win 32767
5 11:02:54.253871 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 1 win 8192
6 11:02:54.272124 IP 127.0.0.1.22 > 127.0.0.1.32936:
P 1:23(22) ack 1 win 8192
7 11:02:54.272375 IP 127.0.0.1.32936 > 127.0.0.1.22: . ack 23 win 8192
代碼顯示的頭兩行是tcpdump的基本說明,而後:
· 第3行顯示的是來自Client端帶有SYN主動聯機的數據包。
· 第4行顯示的是來自Server端,除了響應Client端以外(ACK),還帶有SYN主動聯機的標誌。
· 第5行則顯示Client端響應Server肯定聯機創建(ACK)。
· 第6行之後則開始進入數據傳輸的步驟。
從第3~5行的流程來看,熟不熟悉啊?沒錯。那就是3次握手的基礎流程,有趣吧。不過tcpdump之因此被稱
爲黑客軟件之一遠不止上面介紹的功能。上面介紹的功能能夠用來做爲咱們主機的數據包聯機與傳輸的流程分析,
這將有助於咱們瞭解到數據包的運做,同時瞭解到主機的防火牆設置規則是否有須要修訂的地方。
還有更神奇的用法。當咱們使用tcpdump在Router上面監聽明文的傳輸數據時,例如FTP傳輸協議,
你以爲會發生什麼問題呢?咱們先在主機端執行「tcpdump -i lo port 21 -nn –X」,而後再以FTP登陸本機,
並輸入帳號與密碼,結果你就能夠發現以下的情況:
[root@linux ~]# tcpdump -i lo -nn -X 'port 21'
0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@.......
0x0010: 7f00 0001 0015 80ab 8355 2149 835c d825 .........U!I..%
0x0020: 8018 2000 fe3c 0000 0101 080a 0e2e 0b67 .....<.........g
0x0030: 0e2e 0b61 3232 3020 2876 7346 5450 6420 ...a220.(vsFTPd.
0x0040: 322e 302e 3129 0d0a 2.0.1)..
0x0000: 4510 0041 d34b 4000 4006 6959 7f00 0001 E..A.K@.@.iY.... 0x0010: 7f00 0001 80ab 0015 835c d825 8355 215d .........\.%.U!] 0x0020: 8018 2000 fe35 0000 0101 080a 0e2e 1b37 .....5.........7 0x0030: 0e2e 0b67 5553 4552 2064 6d74 7361 690d ...gUSER.dmtsai. 0x0040: 0a . 0x0000: 4510 004a d34f 4000 4006 694c 7f00 0001 E..J.O@.@.iL.... 0x0010: 7f00 0001 80ab 0015 835c d832 8355 217f .........\.2.U!. 0x0020: 8018 2000 fe3e 0000 0101 080a 0e2e 3227 .....>........2' 0x0030: 0e2e 1b38 5041 5353 206d 7970 6173 7377 ...8PASS.mypassw 0x0040: 6f72 6469 7379 6f75 0d0a ordisyou..
上面的輸出結果已經被簡化過了,你須要自行在你的輸出結果中搜索相關的字符串才行。
從上面輸出結果的特殊字體中,咱們能夠發現該FTP軟件使用的是 vsFTPd,而且用戶輸入dmtsai這個帳號名稱,
且密碼是mypasswordisyou。若是使用的是明文方式來傳輸你的網絡數據呢?
另外你得了解,爲了讓網絡接口可讓tcpdump監聽,因此執行tcpdump時網絡接口會啓動在「混雜模式(promiscuous)」,
因此你會在 /var/log/messages裏面看到不少的警告信息,通知你說你的網卡被設置成爲混雜模式。別擔憂,
那是正常的。至於更多的應用,請參考man tcpdump了。
例題:如何使用tcpdump監聽來自eth0適配卡且通訊協議爲port 22,目標來源爲192.168.1.100的數據包資料?
答:tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.100'。
例子2
普通狀況下,直接啓動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
使用-i參數指定tcpdump監聽的網絡界面,這在計算機具備多個網絡界面時很是有用,
使用-c參數指定要監聽的數據包數量,
使用-w參數指定將監聽到的數據包寫入文件中保存
A想要截獲全部210.27.48.1 的主機收到的和發出的全部的數據包:
B想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊,使用命令:
(在命令行中適用 括號時,必定要
C若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
D若是想要獲取主機210.27.48.1接收或發出的telnet包,使用以下命令:
E 對本機的udp 123 端口進行監視 123 爲ntp的服務端口
F 系統將只對名爲hostname的主機的通訊數據包進行監視。主機名能夠是本地主機,
也能夠是網絡上的任何一臺計算機。下面的命令能夠讀取主機hostname發送的全部數據:
G 下面的命令能夠監視全部送到主機hostname的數據包:
H 咱們還能夠監視經過指定網關的數據包:
I 若是你還想監視編址到指定端口的TCP或UDP數據包,那麼執行如下命令:
J 若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包
,使用命令:
K 想要截獲主機210.27.48.1 和主機210.27.48.2 或210.27.48.3的通訊,使用命令
:(在命令行中適用 括號時,必定要
L 若是想要獲取主機210.27.48.1除了和主機210.27.48.2以外全部主機通訊的ip包,使用命令:
M 若是想要獲取主機210.27.48.1接收或發出的telnet包,使用以下命令:
第三種是協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型
除了這三種類型的關鍵字以外,其餘重要的關鍵字以下:gateway, broadcast,less,
greater,還有三種邏輯運算,取非運算是 ‘not ‘ ‘! ‘, 與運算是‘and‘,‘&&‘;或運算 是‘o
r‘ ,‘||‘;
第二種是肯定傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src ,
若是咱們只須要列出送到80端口的數據包,用dst port;若是咱們只但願看到返回80端口的數據包,用src port。
或者
若是條件不少的話 要在條件以前加and 或 or 或 not
若是在ethernet 使用混雜模式 系統的日誌將會記錄
May 7 20:03:46 localhost kernel: eth0: Promiscuous mode enabled.
May 7 20:03:46 localhost kernel: device eth0 entered promiscuous mode
May 7 20:03:57 localhost kernel: device eth0 left promiscuous mode
tcpdump對截獲的數據並無進行完全解碼,數據包內的大部份內容是使用十六進制的形式直接打印輸出的。
顯然這不利於分析網絡故障,一般的解決辦法是先使用帶-w參數的tcpdump 截獲數據並保存到文件中,
而後再使用其餘程序進行解碼分析。固然也應該定義過濾規則,以免捕獲的數據包填滿整個硬盤。
除了過濾語句,還有一個很重要的參數,也就是說,若是這個參數不設置正確,會致使包數據的丟失!
它就是-s 參數,snaplen, 也就是數據包的截取長度,仔細看man就會明白的!默認截取長度爲60個字節,
但通常ethernet MTU都是1500字節。因此,要抓取大於60字節的包時,使用默認參數就會致使包數據丟失!
只要使用-s 0就能夠按包長,截取數據!
tcpdump的其餘經常使用形式
抓取211.135.2.3的收發數據包
tcpdump host 211.135.2.3
抓取211.123.12.1和211.123.20.1或者192.168.83.47的交互報文
tcpdump host 211.123.12.1 and (211.123.20.1 or 192.168.83.47)
抓取主機211.123.12.1和除了192.168.83.47的IP包
tcpdump ip host 211.123.12.1 and !192.168.83.47
抓取211.123.12.1收發的smtp報文
tcpdump tcp port 25 and host 211.123.12.1
抓取發往eht0接口的icmp報文
tcpdump icmp -n -i eth0
抓包結果重定向
tcpdump tcp port 25 and host 211.123.12.1 > info.txt
只查看IPv4的路由表:
route print -4
Notice here that the Clustered IP Address 10.44.60.6 as well as the 10.51.0.1 「Active」 route is removed. Because the 10.51.0.0 route is removed, connectivity to the backup server is lost. If you bring the Clustered IP Address 10.44.60.6 online again, the 「Active」 routes are re-populated again and connectivity to the backup server is restored.
cluster res 「IP Address 10.44.60.6″ /offline
cluster res 「IP Address 10.44.60.6″ /online
The ROUTE.EXE command has additional parameters of METRIC and INTERFACE that you would need to specify that will bind the route to the card itself.
C:>route /?
Manipulates network routing tables.
ROUTE [-f] [-p] [command [destination]
[MASK netmask] [gateway] [METRIC metric] [IF interface]
interface the interface number for the specified route.
METRIC specifies the metric, ie. cost for the destination.
So what you need to do first is determine what the interface is so that we can bind the route to it. When doing the ROUTE PRINT or NETSH command, it will give you the interfaces at the top first. Something similar to this:
C:>route print
IPv4 Route Table
============================================================
Interface List
23 …00 15 5d 4a ac 06 …… Local Gigabit Controller
19 …00 15 5d 4a ac 01 …… Local Gigabit Controller #2
18 …00 15 5d 4a ac 00 …… Local Gigabit Controller #3
============================================================
-or-
C:>netsh int ipv4 show int
Idx Met MTU State Name
— — —– ———– ——————-
18 50 4294967295 connected Local Gigabit Controller #3
19 5 1500 connected Local Gigabit Controller #2
23 5 1500 connected Local Gigabit Controller
I can go into the Network and Sharing Center if I have to to see which card is on this network. In my particular case, the 「Local Gigabit Controller #3」 is the one I want to use. So to get my persistent route to stay even though the Clustered IP Address goes offline, my command would be this. Note that the METRIC value is not needed.
route -p add 10.51.0.0 mask 255.255.0.0 10.44.60.1 metric 276 if 18
What is a Microsoft Failover Cluster Virtual Adapter anyway?
Network Fault-Tolerant or NetFT.sys
NETFT – Network Fault-Tolerant
TM – Topology Manager (discovers and maintains the cluster network topology. Reports failures of any networks or network interfaces. configures the Microsoft Failover Cluster Virtual Adapter)
IM – Interface Manager (Responsible for any network interfaces that are part of a cluster configuration)
NETFTAPI – NETFT Application Programming Interface (API)
FTI – Fault-Tolerant Interface
As the cluster service starts, there are events registered indicating NETFT is preparing for communications with other pieces of the cluster architecture -
00000784.000007cc::2009/01/30-14:26:38.199 INFO [NETFT] FTI NetFT event handler ready for events.
00000784.000007b0::2009/01/30-14:26:39.369 INFO [NETFT] Starting NetFT eventing for TM
00000784.000007b0::2009/01/30-14:26:39.369 INFO [NETFT] TM NetFT event handler ready for events.
00000784.000007b0::2009/01/30-14:26:39.369 INFO [CS] Starting IM
00000784.000007b0::2009/01/30-14:26:39.369 INFO [NETFT] Starting NetFT eventing for IM
00000784.000007b0::2009/01/30-14:26:39.369 INFO [NETFT] IM NetFT event handler ready for events.
As connectivity is established with other nodes in the cluster, routes are added –
00000784.00000648::2009/01/30-14:26:39.744 INFO [NETFT] Added route
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
00000784.00000648::2009/01/30-14:26:39.744 INFO
Additional events are registered as the routes to the nodes become ‘reachable’ –
00000784.0000039c::2009/01/30-14:26:39.759 DBG [NETFTAPI] Signaled NetftRemoteReachable event, local address 172.16.0.181:003853 remote address 172.16.0.182:003853
00000784.0000039c::2009/01/30-14:26:39.759 DBG [NETFTAPI] Signaled NetftRemoteReachable event, local address 172.16.0.181:003853 remote address 172.16.0.182:003853
00000784.0000039c::2009/01/30-14:26:39.759 DBG [NETFTAPI] Signaled NetftRemoteReachable event, local address 172.16.0.181:003853 remote address 172.16.0.182:003853
00000784.000004f4::2009/01/30-14:26:39.759 INFO [FTI] Got remote route reachable from netft evm. Setting state to Up for route from 172.16.0.181:~3343~ to 172.16.0.182:~3343~.
00000784.000002f4::2009/01/30-14:26:39.759 INFO [IM] got event: Remote endpoint 172.16.0.182:~3343~ reachable from 172.16.0.181:~3343~
00000784.000002f4::2009/01/30-14:26:39.759 INFO [IM] Marking Route from 172.16.0.181:~3343~ to 172.16.0.182:~3343~ as up
00000784.000001f8::2009/01/30-14:26:39.759 INFO [TM] got event: Remote endpoint 172.16.0.182:~3343~ reachable from 172.16.0.181:~3343~
00000784.00000648::2009/01/30-14:26:39.759 INFO [FTW] NetFT is ready after 0 msecs wait.
00000784.00000648::2009/01/30-14:26:39.759 INFO [FTI] Route is up and NetFT is ready. Connecting to node W2K8-CL2 on virtual IP fe80::8b6:30ea:caa3:8da7%15:~3343~
00000784.0000061c::2009/01/30-14:26:39.759 INFO [CONNECT] fe80::8b6:30ea:caa3:8da7%15:~3343~: Established connection to remote endpoint fe80::8b6:30ea:caa3:8da7%15:~3343~.
A consequence of the changes made to the Cluster networking model is the fact that the Cluster network driver now manifests itself as a network adapter, a hidden adapter, but an adapter nonetheless.
While this is hidden from normal view (by default) in Device Manager (must select 「Show hidden devices」 to see it), it is plainly visible when listing the network configuration of a Cluster node using the ipconfig /all command line.
Like other adapters, the Microsoft Failover Cluster Virtual Adapter has a MAC address and both IPv4 and IPv6 addresses assigned to it. The IPv4 address is an Automatic Private Internet Protocol Addressing (APIPA) address and the IPv6 address is a non-routable Link-Local address, but that does not matter as all cluster communications are tunneled through the networks supported by the physical NICs as shown here using the route information obtained during the cluster service startup.
The MAC address that is assigned to the Microsoft Failover Cluster Virtual Adapter is based on the MAC address of one of the physical NICs
The Cluster network driver (netft.sys) is a kernel mode driver and is started and stopped by the Cluster Service.
The Cluster network driver has an entry under HKLMSystemCurrentControlSetServices.
Additionally, there is an entry for the Microsoft Failover Cluster Virtual Adapter in the routing table for each Cluster node. Here are sample outputs for the three sections of the route print command executed on a Cluster node. The first part shows the listing of all the interfaces on the node. Interface 15 is the Microsoft Failover Cluster Virtual Adapter.
This next screen shows the IPv4 Route Table which reflects three entries for the Microsoft Failover Cluster Virtual Adapter.
And finally, the adapter appears in the IPv6 Route Table (If 15).
So, how can one get in trouble? Here are a couple of ways:
Disable the Microsoft Failover Cluster Virtual Adapter.
Sysprep an installation of Windows Server 2008, 2008R2, or 2012 with the Failover Cluster feature installed. This will cause an error in the Cluster Validation Process. Windows 2012R2 can be sysprepped with the Failover Feature installed.
Modifying any properties of the adapter.
The correct answer is to not do anything to the adapter – just let it work for you.
2). 過濾VLAN
vlan.id == 2594
3). IP過濾
//源地址過濾
ip.src == 192.168.0.208
ip.src eq 192.168.0.208
//目標地址過濾
ip.dst == 192.168.0.208
ip.dst eq 192.168.0.208
//ip地址過濾。不論源仍是目標
ip.addr == 192.168.0.208
ip.addr eq 192.168.0.208
4). 端口過濾
tcp.port == 80
udp.port eq 80
tcp.dstport == 80 // 只顯tcp協議的目標端口80
tcp.srcport == 80 // 只顯tcp協議的來源端口80
//過濾端口範圍
tcp.port >= 1 and tcp.port <= 80
5). 經常使用協議過濾
tcp
udp
arp
icmp
http
smtp
ftp
dns
msnms
ip
ssl
等等
排除ssl包,如!ssl 或者 not ssl
6). http模式過濾
http.request.method == 「GET」
http.request.method == 「POST」
http.request.uri == 「/img/logo-edu.gif」
http contains 「GET」
http contains 「HTTP/1.」
// GET包
http.request.method == 「GET」 && http contains 「Host: 」
http.request.method == 「GET」 && http contains 「User-Agent: 」
// POST包
http.request.method == 「POST」 && http contains 「Host: 」
http.request.method == 「POST」 && http contains 「User-Agent: 」
// 響應包
http contains 「HTTP/1.1 200 OK」 && http contains 「Content-Type: 」
http contains 「HTTP/1.0 200 OK」 && http contains 「Content-Type: 」
7). 運算符
less than:lt
less and equal: le
equal:eq
great then:gt
great and equal:ge
not equal:ne
8). 過濾內容
tcp[20] 表示從20開始,取1個字符
tcp[20:]表示從20開始,取1個字符以上
tcp[20:8]表示從20開始,取8個字符
tcp[offset,n]
udp[8:3]==81:60:03 // 偏移8個bytes,再取3個數,是否與==後面的數據相等?
udp[8:1]==32 若是我猜的沒有錯的話,應該是udp[offset:截取個數]=nValue
eth.addr[0:3]==00:06:5B
判斷upd下面那塊數據包前三個是否等於0x20 0x21 0x22
咱們都知道udp固定長度爲8
udp[8:3]==20:21:22
判 斷tcp那塊數據包前三個是否等於0x20 0x21 0x22
tcp通常狀況下,長度爲20,但也有不是20的時候
tcp[8:3]==20:21:22
matches(匹配)和contains(包含某字符串)語法
ip.src==192.168.1.107 and udp[8:5] matches "\x02\x12\x21\x00\x22"
ip.src==192.168.1.107 and udp contains 02:12:21:00:22
ip.src==192.168.1.107 and tcp contains "GET"
udp contains 7c:7c:7d:7d 匹配payload中含有0x7c7c7d7d的UDP數據包,不必定是從第一字節匹配。
9). 經過報文細節建立顯示過濾規則
右鍵細節並使用Apply as Filter子菜單,就能夠根據此細節建立過濾條件。好比使用Apply as Filter->Selected
********************************************************************************************************
10). 以上均爲Display Filter。在開始抓包前能夠進行過濾:Capture Filter (儘可能避免使用抓包過濾。即使多看幾個報文,也比漏看一個報文要好)
host 10.3.1.1:抓取發到/來自10.3.1.1的數據流
host 2406:da00:ff00::6b16:f02d:抓取發到/來自IPv6地址2406:da00:ff00::6b16:f02d的數據流
not host 10.3.1.1:抓取除了發到/來自10.3.1.1之外的全部數據流
src host 10.3.1.1:抓取來自10.3.1.1的數據流
dst host 10.3.1.1:抓取發到10.3.1.1的數據流
host 10.3.1.1 or 10.3.1.2:抓取發到/來自10.3.1.1,以及與之通信的全部數據流,與10.3.1.2,以及與之通信的全部數據流
host www.espn.com:抓取發到/來自全部解析爲www.espn.com的IP地址的數據流
net 10.3.0.0/16:抓取網絡10.3.0.0上發到/來自全部主機的數據流(16表示長度)
net 10.3.0.0 mask 255.255.0.0:與以前的過濾結果相同
ip6 net 2406:da00:ff00::/64:抓取網絡2406:da00:ff00:0000(IPv6)上發到/來自全部主機的數據流
not dst net 10.3.0.0/16:抓取除了發到以10.3開頭的IP地址之外的全部數據流
not src net 10.3.0.0/16:抓取除了來自以10.3開頭的IP地址之外的全部數據流
ip proto
ip[2:2]==
ip[8]==
ip[9]==
icmp[icmptype]==
方括號中第一個數字表示從協議頭開始的偏移量,第二個數字表示須要觀察多少位。
ip broadcast:抓取廣播報文
ip multicast:抓取多播報文
dst host ff02::1:抓取到IPv6多播地址全部主機的數據流
dst host ff02::2:抓取到IPv6多播地址全部路由器的數據流
ether host 00:08:15:00:08:15:抓取發到/來自00:08:15:00:08:15的數據流
ether src 02:0A:42:23:41:AC:抓取來自02:0A:42:23:41:AC的數據流
ether dst 02:0A:42:23:41:AC:抓取發到02:0A:42:23:41:AC的數據流
not ether host 00:08:15:00:08:15:抓取除了發到/來自00:08:15:00:08:15之外的全部數據流
ether broadcast或ether dst ff:ff:ff:ff:ff:ff:抓取廣播報文
ether multicast:多播報文
抓取指定以太網類型的報文:ether proto 0800
抓取指定VLAN:vlan
抓取指定幾個VLAN:vlan
port 53:抓取發到/來自端口53的UDP/TCP數據流(典型是DNS數據流)
not port 53:抓取除了發到/來自端口53之外的UDP/TCP數據流
port 80:抓取發到/來自端口80的UDP/TCP數據流(典型是HTTP數據流)
udp port 67:抓取發到/來自端口67的UDP數據流(典型是DHCP據流)
tcp port 21:抓取發到/來自端口21的TCP數據流(典型是FTP命令通道)
portrange 1-80:抓取發到/來自端口1-80的全部UDP/TCP數據流
tcp portrange 1-80:抓取發到/來自端口1-80的全部TCP數據流
port 20 or port 21:抓取發到/來自端口20或21的UDP/TCP數據流(典型是FTP數據和命令端口)
host 10.3.1.1 and port 80:抓取發到/來自10.3.1.1端口80的數據流
host 10.3.1.1 and not port 80:抓取發到/來自10.3.1.1除了端口80之外的數據流
udp src port 68 and udp dst port 67:抓取從端口68到端口67的全部UDP數據流(典型是從DHCP客戶端到DHCP服務器)
udp src port 67 and udp dst port 68:抓取從端口67到端口68的全部UDP數據流(典型是從DHCP服務器到DHCP客戶端)
抓取TCP鏈接的開始(SYN)和結束(FIN)報文,配置tcp[tcpflags] & (tcp-syn|tcp-fin)!=0
抓取全部RST(Reset)標誌位爲1的TCP報文,配置tcp[tcpflags] & (tcp-rst)!=0
less
greater
tcp[13] & 0×00 = 0: No flags set (null scan)
tcp[13] & 0×01 = 1: FIN set and ACK not set
tcp[13] & 0×03 = 3: SYN set and FIN set
tcp[13] & 0×05 = 5: RST set and FIN set
tcp[13] & 0×06 = 6: SYN set and RST set
tcp[13] & 0×08 = 8: PSH set and ACK not set
tcp[13]是從協議頭開始的偏移量,0,1,3,5,6,8是標識位
SELinux
vi /etc/selinux/config
SELINUX=disabled
setenforce 0