大脑是用来思考的,不应该用来存储。CPU不应该用来做存储。因此工具多记笔记,多完善笔记。重要的是具备逻辑思维。逻辑思维加上笔记,你就是大牛。
用简单的话来定义tcpdump,就是:dump the traffic on a network,对网络上的数据包进行截获的包分析工具。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
命令格式
tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -s snaplen ] [ -w file ] [ expression ]
常见命令
1、安装tcpdump
yum install tcpdump
2、列出本机所有的网卡接口tcpdump -D
3、捕获特定网卡的数据包tcpdump -i eth0
4、捕获具体数量的数据包tcpdump -c 5 -i eth0
5、捕获的数据包保存到指定的文件tcpdump -w 0001.pcap -i eth0
6、捕获的数据包显示IP而不是域名tcpdump -n -i eth0
7、捕获指定协议的数据包tcpdump -i eth0 tcp
8、捕获特定端口的数据包tcpdump -i eth0 port 22
dst port 22为目的端口为22;src port为源接口;port两目的和源接口。
9、捕获从指定IP过来的数据包tcpdump -i eth0 src 192.168.0.2
10、捕获去往目的IP数据包tcpdump -i eth0 dst 50.116.66.139
11、捕获HTTP请求的URLtcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
12、捕获HTTP的POST请求的密码tcpdump -s 0 -A -n -l | egrep -i "POST /|pwd=|passwd=|password=|Host:"
13、以ASCII码的格式打印tcpdump -A -i eth0
14、以ASCII码和十六进制打印tcpdump -XX -i eth0
15、读取捕获的数据包文件tcpdump -r 0001.pcap
16、抓取本地环路数据包
tcpdump -i lo udp // 抓取UDP数据 tcpdump -i lo udp port 1234 // 抓取端口1234的UDP数据 tcpdump -i lo port 1234 // 抓取端口1234的数据
17、抓取特定类型的数据包:
tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'
抓取所有经过网卡1的SYN类型数据包
tcpdump -i eth1 udp dst port 53
抓取经过网卡1的所有DNS数据包(默认端口)
18、逻辑语句过滤
tcpdump -i eth0 '(( tcp) and ((dst net 172.16) and (not dst host 192.268.1.200)))'
抓取所有经过网卡1,目的网络是172.16,但目的主机不是192.168.1.200的TCP数据
19、宿主机抓包docker实例
在宿主机上监听指定Docker 实例的网络流量,需要首先找到在宿主机上与实例配对的网卡。再使用tcpdump 命令进行监听。(1)进入到Docker实例中。
docker exec ‐it 1a /bin/bash
(2)容器中执行查看参数的命令。
cat /sys/class/net/eth0/iflink 135
(3)退出容器,在宿主机上找到对应数字的网卡
bridge link show 133: veth54e9e5c state UP @(null): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master docker0 state forwarding priority 32 cost 2 135: veth98165f5 state UP @(null): <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master docker0 state forwarding priority 32 cost 2 也可以得到网卡名称: veth98165f5 , @if134 的意思是与134号网卡通过 Veth pair 技术连通网络。
(4)对docker网卡进行抓包,并将抓包结果写入到文件中,该文件可以在Windows上的wireshark解析。
# 将抓包写入文件后,控制台上将不再显示抓包数据。 sudo tcpdump ‐i veth98165f5 ‐w veth98165f5.pcap # 读入抓包的文件并解析显示 sudo tcpdump ‐r veth98165f5.pcap # 通过组合键,将抓包写入到文件,同时控制台显示出来。 # tcpdump抓包,写入标准输出;tee获取标准输出的内容,写入文件,并输出到标准 输出;tcpdump从标准输入中获取数据并解析。 sudo tcpdump ‐i veth98165f5 ‐w ‐ | tee veth98165f5.pcap | tcpdump ‐r ‐ # 带有过滤条件的抓包 sudo tcpdump ‐i veth98165f5 port not 13506 and port not 5391 and port not 1883
参考