文章目录
前言
tcpdump是一个常用的网络包分析工具,可以通过网络传输到本系统的TCP/IP以及其他网络的数据包。tcpdump使用libpcap库来抓取网络包,可以将网络中传输的数据包的头部完全截获进行分析,它支持针对网络层、协议层、主机、网络或端口的过滤,并提供and、or、not等逻辑语句进行过滤。
一、tcpdump基础语法
支持操作如下:
tcpdump option proto direction type
1)option过滤规则
[ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
[ -c count ]
[ -C file_size ] [ -G rotate_seconds ] [ -F file ]
[ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
[ --number ] [ -Q|-P in|out|inout ]
[ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ]
[ -E spi@ipaddr algo:secret,… ]
[ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
[ --time-stamp-precision=tstamp_precision ]
[ --immediate-mode ] [ --version ]
[ expression ]
2)proto过滤器
tcp/udp/icmp/ip/ip6/arp…
3)direction过滤器
src/dst/src or dst
4)type过滤器
host/net/port/portrage
二、常用过滤规则
1.基于ip地址过滤
1)使用host并指定ip进行过滤
tcpdump host 192.168.116.10
2)基于源ip和目标ip进行过滤
--基于源ip过滤
tcpdump src host 192.168.116.10
--基于目标ip过滤
tcpdump dst host 192.168.116.10
2.基于端口过滤
1)基于源端口和目标端口过滤
--基于源端口过滤
tcpdump src port 22
--基于两个端口过滤
tcpdump src port 22 or port 8080
2)基于端口协议过滤
--基于ssh协议过滤
tcpdump src port ssh
--基于tcp协议过滤
tcpdump port tcp
3.端口解析参数
1)-n:不把ip转换成域名,直接显示ip
tcpdump tcp -n
2)-nn:不把协议和端口号转换成名字
tcpdump tcp port ssh -nn
3)-N:不打印host的域名部分
tcpdump tcp port ssh -Q out -N
4.抓包结果文件处理
1)结果输出到文件
使用-w参数,文件格式为.pcap或.cap
tcpdump tcp -w tcp.pcap
2)读取结果文件
使用-w参数,文件格式为.pcap或.cap
tcpdump tcp -r tcp.pcap
5.组合过滤规则
and:逻辑并,同&&; or:逻辑或,同||; not 逻辑非,同!
1)抓取ip地址为192.168.116.10,并且端口为54321的包
tcpdump -i any host 192.168.116.10 and port 54321
2)抓取ip地址为192.168.116.10,并且端口为54321或者端口为51111的包
tcpdump -i any 'host 192.168.116.10 and (port 54321 && port 51111)'
三、tcpdump输出
01:16:16.272504 IP 192.168.116.10.49148 > 192.168.116.10.54321: Flags [P.], seq 3059446268:3059446310, ack 2760817304, win 354, options [nop,nop,TS val 20978756 ecr 20978756], length 42
01:16:16.272504:时间
IP:网络协议
192.168.116.10.49148:源端ip地址和端口
>:数据流向
192.168.116.10.54321:接收端ip地址和端口
Flags [P.], seq 3059446268:3059446310, ack 2760817304, win 354, options [nop,nop,TS val 20978756 ecr 20978756], length 42:数据包内容,Flags标识符,seq号,ack号,win窗口,数据长度length
Flags
[S]:SYN 开始连接
[P]:PSH 开始发送数据
[F]:FIN 结束连接
[R]:RST重置连接
[.]:没有Flags,除上面四种类型外其他情况,可能为ACK也可能是URG
四、使用wireshark工具解析tcpdump包
1)构造业务
使用jmeter进行创建50张表,并对表进行并发查询
--建表语句
create table if not exists tab${num}(id int,name varchar(40),age int,c text);
--插入数据
insert into tab${__Random(1,50,)} values(generate_series(1,1000),md5(random()::text),(random()*(30-10)+30)::int,now());
--查询语句
select * from tab${__Random(1,50,)};
2)使用tcpdump进行抓包
- 直接抓包
tcpdump -i ens33 -c30 -s0 -nn -A port 54321
![在这里插入图片描述](https://img-blog.csdnimg.cn/836b3c6892c34679a9c79abb68fba809.png#pic_center)
[root@localhost jp]# tcpdump -i ens33 -c30 -s0 -nn -A port 54321
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
00:16:19.087644 IP 192.168.116.1.57040 > 192.168.116.10.54321: Flags [S], seq 2575337855, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
E..4..@....j..t...t
...1............4...............
00:16:19.087767 IP 192.168.116.10.54321 > 192.168.116.1.57040: Flags [S.], seq 1445376770, ack 2575337856, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
E..4..@.@..g..t
..t..1..V&........r.i...............
00:16:19.087994 IP 192.168.116.1.57040 > 192.168.116.10.54321: Flags [.], ack 1, win 4106, length 0
E..(..@....u..t...t
...1....V&..P..
- 存储为离线文件
tcp -i ens33 -s 0 -X -A port 54321 -w dbtest.cap
[root@localhost jp]# tcpdump tcp -i ens33 -s 0 -X -A port 54321 -w dbtest.cap
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C494479 packets captured
624628 packets received by filter
130149 packets dropped by kernel
3)使用wireshark解析报文
加载文件:“文件 -> 打开 -> dbtest.cap”
配置wireshark过滤条件:
- “分析 -> 解码为 :
TCP port -> 54321
;当前 -> PGSQL
” - “ip.addr == 192.168.116.1 and tcp.dstport > 54321”