1. tcpdump 命令詳解
1.1 tcpdump 命令的基本簡介
- tcpdump :dump the traffic on a network 根據使用者的定義對網絡上的數據包進行截獲的分析工做;tcpdump 能夠講網絡中傳送的數據包的header徹底截獲下來進行分析;它支持對網絡層(net IP 段)、協議(TCP/UDP)、主機(src/dst host)、網絡或端口(prot)的過濾,並提供and、or、not 等邏輯語句來幫助你去掉無用的信息。
- tcpdump:默認狀況下,sudo /usr/sbin/tcpdump 會監視 第一個網絡接口 通常是eth0 的全部port 全部協議的 數據包
1.2 tcpdump 的主要選項
協議 |
TCP,UDP,IP,ARP,RARP,ETHER,FDDI |
網絡(net) |
192.168.0.0/16 IP網段 |
方向(host) |
src,dst,src or dst,src and dst |
端口(prot) |
80 22 !22 9999 |
邏輯 |
and,or,not &&,||,! |
- 協議:tcp udp ip arp rarp ether fddi 協議這選項要放在 前面,由於要過濾數據包
- 網絡:net ip網段 tcpdump net 192.168.1.0/24 監聽這個網段
- 方向:host 就是主機 src 是源主機、dst 是目的主機 or and 是邏輯 tcpdump host test.hostname
- 端口:port 指定tcpdump 監聽的端口 tcpdump src 192.168.1.11 and port 80 監聽源IP是192.168.1.11 的80端口
- 邏輯:是表示 與 或 即:同時知足或知足之一
前面的四個選項:協議、net 、host、port 若是同時在 tcpdump 裏面 時必須用 邏輯 and 鏈接起來;並且如用() 必定要轉義,不然會包語法錯誤。 linux
2. tcpdump 的選項
2.1 主要選項
- -i :指定網卡 默認是 eth0
- -n :線上ip,而不是hostname
- -c :指定抓到多個包後推出
- -A:以ASCII方式線上包的內容,這個選項對文本格式的協議包頗有用
- -x:以16進制顯示包的內容
- -vvv:顯示詳細信息
- -s :按包長截取數據;默認是60個字節;若是包大於60個字節,則抓包會出現丟數據;因此咱們通常會設置 -s 0 ;這樣會按照包的大小截取數據;抓到的是完整的包數據
- -r:從文件中讀取【與 -w 對應,/usr/sbin/tcpdump -r test.out 讀取 tcpdump -w test.out】
- -w:處處指向文件【必定要用,-w t.out ,而後用 -r t.out 來看抓包信息,不然可讀性不好】
使用:windows
tcpdump -w google.cap #抓包結果存放在文件中
tcpdump -r google.cap http #還可使用-r參數制定抓包數據文件
tcpdump -i eth1 #使用-i參數指定經過哪個網卡抓包
tcpdump -D #查看哪幾個網卡抓包服務器
2.2 tcpdump 抓包的具體含義
tcpmdump 抓包出來分析包的具體含義網絡
- 包攜帶的標誌:
- S:S=SYC :發起鏈接標誌
- P:P=PUSH:傳送數據標誌
- F:F=FIN:關閉鏈接標誌
- ack:表示確認包
- RST=RESET:異常關閉鏈接
- . 表示沒有任何標誌
3. tcpdump的實例:
- 起步1: 抓取指定端口的包
tcpdump -i eth0 -c 100
- 起步2:抓取指定協議的包
tcpdump -i eth0 -c 100 tcp
- 起步3:抓取指定協議,指定port的包【tcp ip port src dst host net】
tcpdump -i eth0 -c 100 tcp port 5440
- 起步4:組合過濾條件【and or not】
tcpdump -i eth0 -c 100 tcp port 5440 and src host 192.1.1.2
- 起步5:抓取指定網段的包
tcpdump -i eth0 -c 100 tcp port 5440 and src net 192.1.1.0/24
- 高級1:寫入文件並用wireshark在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
而後用ftp傳輸到windows下面,在用wireshark打開cap文件便可
- 高級2:提取http包
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 -c 20 -w ./target.cap
其中-s 0表示不限制包的大小;tcp[20:2]從表示tcp包頭第20個字節開始的2個字節等於0x4745(對應字符GE)或者等於0x4854(對應HT);
這種方法適用於tcp頭中OPTION爲空的狀況,若是不爲空,須要從第24個字節開始。 基本語法tcp
========
過濾主機
--------
- 抓取全部通過 eth1,目的或源地址是 192.168.1.1 的網絡數據
# tcpdump -i eth1 host 192.168.1.1
- 源地址
# tcpdump -i eth1 src host 192.168.1.1
- 目的地址
# tcpdump -i eth1 dst host 192.168.1.1
過濾端口
--------
- 抓取全部通過 eth1,目的或源端口是 25 的網絡數據
# tcpdump -i eth1 port 25
- 源端口
# tcpdump -i eth1 src port 25
- 目的端口
# tcpdump -i eth1 dst port 25網絡過濾
--------
# tcpdump -i eth1 net 192.168
# tcpdump -i eth1 src net 192.168
# tcpdump -i eth1 dst net 192.168
協議過濾
--------
# tcpdump -i eth1 arp
# tcpdump -i eth1 ip
# tcpdump -i eth1 tcp
# tcpdump -i eth1 udp
# tcpdump -i eth1 icmp
注意:在linux抓取包後用tcpdump -r 只能看到包的簡單信息;若是須要查詢抓取包的詳細信息須要把抓取的包target.cap 經過 ftp服務器傳輸到windows機器上;藉助wireshark工具來分析數據;wireshark是一款開源的分析網絡抓包的工具;灰常的好用。工具