当我们在服务器端时,因为没有图形化界面,虽然wireshark也可以工作在命令行界面,但是也是需要下载
这时我们要考虑另一种抓包方法
tcpdump
tcpdump -i eth0 -s 0 -w file.pcap //i表示抓哪个接口的数据包 s表示抓数据包的大小 0表示包有多大抓多大 w 表示将抓到的数据包保存到哪里
输入命令后,开始抓包
之后输入命令读取数据包tcpdump -r file.pcap
也可以以ascll形式来显示数据包的内容 tcpdump -A -r file.pcap
或者以16进制来显示 tcpdump -X -r file.cap
—十六进制显示
抓包筛选器(只抓要的包)
tcpdump -i eth0 port 22 /只抓取22端口的数据包
主机A运行tcpdump -i eth0 port 22
主机B 运行nc -nv 192.168.31.213 22
可以得到主机B尝试连接主机A被拒绝的数据包
并且如果主机B尝试连接主机A的其他端口时,主机A是抓不到包的
显示筛选器(包都抓,但只显示要的包)
tcpdump -n -r aa.cap//参数n意为不会对抓到的包中的域名进行解析,只会以ip地址的形式显示出来
-效果图-
再加入管道命令 tcpdump -n - r aa.cap | awk ‘{print $3}’
让它只显示包中的第三列 (以空格为列的分隔符)
如图
再加入命令去除重复
tcpdump -n - r aa.cap | awk '{print $3}' |sort -u
//sort -u 为不显示重复的ip地址
如图
以上用的是系统自带的筛选方法
接下来介绍tcpdump的显示筛选方法
tcpdump -n src host 192.168.31.113 -r aa.cap//只显示 源ip为192.168.31.113 的包
同样的还能以端口号 port 进行筛选
tcpdump高级筛选
如图所示:这是一个tcp的包头 其中8个位为一个字节 源和目的端口分别占2个字节 序列号占4个字节 确认号占4个字节 数据偏移值占 1个字节 保留位占 1个字节
我们的flag标签位 占一个字节
当我们想要抓取ack和pst为1的数据包时 转换为2进制 就是 00011000 转换为十进制就是 24 所以我们输入以下指令
tcpdump -A -n 'tcp [13] = 24 ' -r aa.cap //tcp方框中表示的是字节的序号,我们要的标签位是第13个字节(从零开始数) 并且该标签位等于24
如图