TCPDUMP是一款網絡分析命令行工具,最初由Van Jacobson,Sally Floyd,Vern Paxson和Steven McCanne於1988年編寫,可以捕捉通過計算機所連接網絡發送和接收的各類數據包。TCPDUMP相比 Wireshark 更原始,兩者常常結合使用。
參數釋義
可以使用man tcpdump
命令查看參數tcpdump使用手冊,以下是一些常見參數的釋義:
- -i any : 監聽所有網絡接口
- -i eth0 : 監聽網卡eth0
- -D : 顯示所有可用接口
- -n : 不解析主機名,可避免DNC查詢
- -nn : 不解析主機名,也不將協議和端口號轉換爲名稱
- -q : quiet,打印更少的協議信息
- -t : 不在每行打印時間戳
- -tttt : 以2019-12-31 02:03:48.523512這樣的可讀性最強的形式打印時間戳
- -X : 在解析和打印時,除了打印每個數據包的報頭外,還以十六進制和ASCII格式打印每個數據包的數據
- -XX : 與-X相同,並額外顯示以太網報頭
- -v, -vv, -vvv : 逐漸增加信息的詳細程度
- -c : 進捕獲指定數量的數據包
- -s : 以字節爲單位定義捕獲的包大小
- -S : 打印TCP序列號的絕對值
- -e : 表示在輸出中包含鏈路層頭信息,例如可用於打印以太網和IEEE 802.11等協議的MAC層地址
- -E :通過提供加密密鑰來解密IPSEC流量
TCPDUMP語法
Syntax: | Protocol | Direction | Host(s) | Value | Logical Operations | Other expression | ||||||
Example: | tcp | dst | port | 80 | and | tcp dst host 10.2.2.2 |
語法示例
Protocol,值可爲:ether, fddi, ip, arp, rarp, decnet, lat, sca, moprc, mopdl, tcp, udp。
如果未指定,則默認使用所有協議
Direction,值可爲: src, dst, src and dst, src or dst
如果不指定,則默認使用 “src or dst” ,例如,”host 10.2.2.2″ 等於 “src or dst host 10.2.2.2”
Host(s),值可爲: net, port, host, portrange。
如果不指定,則默認使用 “host” ,例如,”src 10.1.1.1″ 等於 “src host 10.1.1.1”.
Logical Operations,值可爲: not, and, or。
“not”優先級最高,”or”和”and” 優先級相同,例如 “not tcp port 3128 and tcp port 23” 等於 “(not tcp port 3128) and tcp port 23″,而不等於 “not (tcp port 3128 and tcp port 23)”。
常見用法示例
1、列出所有網絡接口:
$ tcpdump -D
1.eth0
2.eth1
3.eth2
2、抓取特定接口的包:
tcpdump -i eth1
3、抓取指定數量的包:
tcpdump -i eth1 -c 10
4、抓包並保存至文件:
tcpdump -i eth1 -w tmp.pcap
5、包大小設爲最大, 0即65535 :
tcpdump -i eth1 -w tmp.pcap -s 0
6、讀取一個本地文件:
tcpdump -tttt -r tmp.pcap
7、抓包時時間戳顯示爲可讀性最佳:
tcpdump -i eth1 -tttt
8、僅抓取指定協議的數據包:
tcpdump -i eth1 arp
9、僅抓取源地址或目的地址爲指定IP的數據包:
tcpdump host 1.2.3.4
10、僅抓取源地址爲指定IP的數據包、 僅抓取目的地址爲指定IP的數據包、:
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6
11、抓取一個網段的流量,通常結合src和dst使用:
tcpdump net 1.2.3.0/24
12、抓取指定端口的流量:
tcpdump -i eth1 port 22
tcpdump -i eth1 src port 1026
13、根據數據包大小過濾流量,可以使用greater、less或者數學符號:
tcpdump -i eth1 less 32
tcpdump -i eth1 greater 64
tcpdump -i eth1 <= 128
14、抓取指定IP和端口的流量:
tcpdump -i eth1 dst 10.181.140.216 and port 22
15、顯示更詳細的數據包信息:
tcpdump -i eth1 -vvv
16、顯示鏈路層頭信息:
tcpdump -i eth1 -e -t
listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
52:54:00:e1:1c:10 (oui Unknown) > 01:80:c2:00:00:00 (oui Unknown), 802.3, length 60: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id 8000.52:54:00:e1:1c:10.8003, length 43
52:54:00:e1:1c:10 (oui Unknown) > 01:80:c2:00:00:00 (oui Unknown), 802.3, length 60: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1d, Config, Flags [none], bridge-id 8000.52:54:00:e1:1c:10.8003, length 43
17、不顯示時間戳:
tcpdump -i eth2 -t
listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
STP 802.1d, Config, Flags [none], bridge-id 8000.52:54:00:e1:1c:10.8003, length 43
STP 802.1d, Config, Flags [none], bridge-id 8000.52:54:00:e1:1c:10.8003, length 43
如果不加-t參數,則會看到如下信息:
tcpdump -i eth2
listening on eth2, link-type EN10MB (Ethernet), capture size 65535 bytes
08:44:51.295229 STP 802.1d, Config, Flags [none], bridge-id 8000.52:54:00:e1:1c:10.8003, length 43
08:44:53.296795 STP 802.1d, Config, Flags [none], bridge-id 8000.52:54:00:e1:1c:10.8003, length 43
18、顯示IP地址而不是DNS名稱:
tcpdump -i eth1 -n
19、 以ASCII 編碼顯示數據包:
tcpdump -i eth1 -A
20、以十六進制和ASCII顯示捕獲的數據包:
tcpdump -i eth1 -XX
一些特殊用法
1、查找http用戶代理:
tcpdump -vvAls0 | grep 'User-Agent:'
2、查找明文get請求:
tcpdump -vvAls0 | grep 'GET'
3、查找http host頭:
tcpdump -vvAls0 | grep 'Host:'
4、查找http cookies:
tcpdump -vvAls0 | grep 'Set-Cookie|Host:|Cookie:'
5、查找SSH連接,此命令不論ssh使用何端口都可以使用:
tcpdump 'tcp[(tcp[12]>>2):4] = 0x5353482D'
6、查找DNS流量:
tcpdump -vvAs0 port 53
7、查找ftp流量:
tcpdump -vvAs0 port ftp or ftp-data
8、查找ntp流量:
tcpdump -vvAs0 port 123
9、查找明文密碼:
tcpdump port http or port ftp or port smtp or port imap or port pop3 or port telnet -lA | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '