[TOC]
0x00 快速入门
描述:tcpdump 命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项 test.pcap 将数据包保存到文件中,方便wireshark以后分析,同时它也是一个学习网络通信协议必备;
1 | #基础语法与选项 |
实际案例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81#示例0. 直接启动tcpdump将监视第一个网络接口上所有流过的数据包
tcpdump
tcpdump -i lo #抓取回环网口的包 ICMP->64bit数据
# ping 127.0.0.1 -c 3
# PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
# 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.018 ms
# 64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.047 ms
10:46:14.721374 IP localhost > localhost: ICMP echo request, id 6085, seq 1, length 64
10:46:14.721379 IP localhost > localhost: ICMP echo reply, id 6085, seq 1, length 64
10:46:15.721181 IP localhost > localhost: ICMP echo request, id 6085, seq 2, length 64
10:46:15.721189 IP localhost > localhost: ICMP echo reply, id 6085, seq 2, length 64
10:46:16.721137 IP localhost > localhost: ICMP echo request, id 6085, seq 3, length 64
10:46:16.721145 IP localhost > localhost: ICMP echo reply, id 6085, seq 3, length 64
#示例1.指定网卡与端口抓包病并写入文件
tcpdump -i eth0 -nnX port 21 #指定端口抓包
tcpdump -i eth0 -nnX port 21 -c 12 -vv -w test.pcap #写入到test.pcap文件
tcpdump tcp port 23 host 210.27.48.1 # 监视指定主机和端口的数据包,接收或发出的telnet包
#示例2.读取之前产生的 tcpdump 文件
$ tcpdump -r packets_file.pcap
#示例3.要获取整个网络的数据包
tcpdump -i ens192 net 10.10.107.0/24
# 10:53:24.804535 IP 10.20.172.108.51147 > localhost.localdomain.ssh: Flags [.], ack 1872256, win 16425, length 0
# 10:53:24.804537 IP localhost.localdomain.ssh > 10.20.172.108.51147: Flags [P.], seq 1872256:1872384, ack 3505, win 343, length 128
#示例4.根据IP地址查看报文,不管是作为源地址还是目的地址
$ tcpdump host 192.168.1.100
$ tcpdump -i eth0 src host hostname #只对机器名为hostname的主机的通信数据包进行监视,主机名可以是本地主机,也可以是网络上的任何一台计算机。
#要指定 IP 地址是源地址或是目的地址则使用:
$ tcpdump src 192.168.1.100
$ tcpdump dst 192.168.1.100
tcpdump -i ens192 src 10.20.172.108 -vv -nnX #十六进制展示
# tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
# 10:56:00.410729 IP (tos 0x0, ttl 127, id 29668, offset 0, flags [DF], proto TCP (6), length 40)
# 10.20.172.108.51147 > localhost.localdomain.ssh: Flags [.], cksum 0x097b (correct), seq 362959904, ack 1096206029, win 16425, length 0
#示例5.指定协议查询
tcpdump arp -i ens192 -vv -nnX
# tcpdump: listening on ens192, link-type EN10MB (Ethernet), capture size 262144 bytes
# 11:07:37.543934 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.10.107.222 tell 192.168.3.1, length 46
# 0x0000: 0001 0800 0604 0001 d4a1 48a4 5e07 c0a8 ..........H.^...
# 0x0010: 0301 0000 0000 0000 0a0a 6bde 0000 0000 ..........k.....
#示例7.关键字可以组合起来构成强大的组合条件
tcpdump host helios and \( hot or ace \) # 打印helios 与 hot 或者与 ace 之间通信的数据包
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \) #截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump ip host ace and not helios # 打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host 210.27.48.1 and ! 210.27.48.2 #获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包
#示例8.指定端口范围的数据包
$ tcpdump tcp portrange 22-125 -nnX -i ens192 #要捕获某个端口或一个范围的数据包
$ tcpdump udp portrange 22-125 -nnX -i ens192 #要捕获某个端口或一个范围的数据包
# 1 packet captured == 捕获的封包数量
# 29 packets received by filter == 被过滤过的总封包个数
# 137 packets dropped by kernel == 被核心所丟棄的封包
#示例9.检查监视通过指定网关的数据,以及到指定端口的TCP或UDP数据包:
tcpdump -i eth0 gateway Gatewayname
tcpdump -i eth0 host hostname and port 80
#示例10.高级网络
# 注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析
tcpdump net ucb-ether # 打印本地主机与Berkeley网络上的主机之间的所有通信数据包
tcpdump 'gateway snup and (port ftp or ftp-data)' # 打印所有通过网关snup的ftp数据包
tcpdump ip and not net localnet # 打印所有源地址或目标地址是本地主机的IP数据包
#如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。
#示例11:如果使用 VMkernel 接口 vmk0 和位于 10.11.12.13 的 NTP 服务器:
tcpdump-uw -c 5 -n -i network_interface host ntp_server_ip_address and port 123
tcpdump-uw -c 5 -n -i vmk0 host 10.11.12.13 and port 123

WeiyiGeek.示例5

WeiyiGeek.案例7