文章目录
tcpdump可以抓取什么数据包(默认每个包只抓68+28=96个字节的说法应该是错误的)
tcpdump直接从网络驱动层,抓取输入数据,不经过任何linux网络协议栈,iptables依赖netfilter模块,它工作在linux网络协议栈中.
#所以:
tcpdump能抓取到被iptables在INPUT链上 DROP的数据
tcpdump不能抓取被iptables在OUTPUT链上 DROP的数据
tcpdump 常用参数介绍
tcpdump -D 显示所有的网络接口(网卡)(可以用它先查看系统有哪些接口可以抓包)
tcpdump -i eth0 指定抓取某个网卡的流量
tcpdump -c 100 指定抓取数据包的数量,这里是100个数据包
tcpdump -r file.cap 读取数据包
tcpdump -s 0 抓取完整的数据包
tcpdump -n 不进行域名解释,不要将IP地址和端口号进行转换,进行转换会耗费CPU时间(只以ip地址形式显示)
tcpdump -t 在输出的每一行不打印时间戳
tcpdump -e 在输出行打印出数据链路层的头部信息
tcpdump -a 将网络地址和广播地址转变成名字
tcpdump -v 输出稍详细的报文信息,-vv 输出更详细的报文信息
tcpdump -w /var/log/shuju.log 将抓取的数据包保存为shuju.log,并不显示在终端上
tcpdump -G 60 指定间隔60秒,每隔60秒就保存一个文件,通常与-w 文件名中的时间变量一同使用,见下面的高级用法
%d 每月中的第几天,十进制数字从01到31。
%H 表示当前的小时时间,十进制数字从00到23。
%M 表示当前的分钟时间,十进制数字从00到59。
%S 表示当前的秒时间,十进制的00到60
tcpdump udp 指定抓取udp协议的数据包
tcpdump port 80 指定抓取80端口的数据包
tcpdump src port 80 指定抓取源端口为80的数据包
tcpdump dst port 80 指定抓取目的端口为80的数据包
tcpdump portrange 1-1024 指定抓取的端口范围
tcpdump host www.wsfnk.com 指定抓取包含主机为www.wsfnk.com的所有数据包
tcpdump host 192.168.1.1 指定抓取包含主机为192.168.1.1的所有数据包
tcpdump src host 192.168.1.1 抓取来自192.168.1.1的数据包
tcpdump dst host 192.168.1.1 抓取去往192.168.1.1的数据包
tcpdump greater 1000 指定抓取大于1000字节的数据包
tcpdump less 15 指定抓取小于15字节的数据包
tcpdump -A 指定以ascii码的形式显示数据包的内容
tcpdump -X 以十六进制和ascii码两种形式显示包的内容
tcpdump在表达式中一般有如下几种类型的关键字
1、关于类型的关键字
host(缺省类型): 指明一台主机,如:host 10.215.20.13
net: 指定网络地址, net 10.215.20.0
port: 指明端口号, port 3306
2、确定传输方向的关键字
dst or src(缺省值) 指定源或者目标地址是 10.215.20.13 的流量包
src: src 10.9.51.13, 指定源地址是 10.9.51.13
dst: dst net 172.0.0.0, 指定目标网络地址是 172.0.0.0
dst and src 比如: src host 10.9.51.13 and dst host 10.215.20.13
3、协议的关键字(缺省值是监听所有协议的信息包)
ip
arp
rarp
tcp
udp
icmp
fddi
4、三种逻辑运算
非 : ! , not
与 : && , and
或 : || , or
5、其他关键字
gateway
broadcast
less
greater
例子:tcpdump 的逻辑组合及流量过滤
与 tcpdump tcp and src host 192.168.1.1 and port 80
或 tcpdump src host 192.168.1.1 or src host 192.168.1.2
非 tcpdump tcp and src host 192.168.1.1 and not port 80
tcpdump 的常规用法
截获来自主机1.1.1.1的所有数据
tcpdump -v -i eth0 src host 1.1.1.1
截获发往1.1.1.1的所有数据
tcpdump -v -i eth0 dst host 1.1.1.1
抓取来自192.168.60.0/22网络的所有数据(注意这里的CIDR形式,注意一定要是网络地址,不能是广播地址,也不能是net中的其中一个主机地址,不然会报错的)
tcpdump -v -i eth0 'src net 192.168.60.0/22'
抓取vlan 10的所有数据
tcpdump -v -i eth0 vlan 10
tcpdump -ei eth0 vlan 10
tcpdump -ei eth0 | grep -i vlan
抓取pppoe的密码数据
tcpdump -v -i eth0 pppoes
抓取arp协议的数据包
tcpdump -v -i eth0 arp
抓取ospf协议的数据包(下面两个命令功能相同)(注意:抓tcp时不能写成ip proto tcp,应写成ip proto 6 )
tcpdump -v -i eth0 ip proto ospf
tcpdump -v -i eth0 ip proto 89
抓取端口范围的数据包(抓取21-23端口的所有数据包)
tcpdump -i eth0 portrange 21-23
抓取以太网地址数据
tcpdump ether host fa:26:3e:01:3c:40
抓取主机172.16.1.253访问服务器22端口的所有数据包
tcpdump -v -i eth0 src host 172.16.1.253 and dst port 22
抓取源ip是172.16.1.122且端口不是22的数据包
tcpdump -v -i eth0 src host 172.16.1.122 and not port 22
把抓取的数据包记录到123.cap文件中,当抓取1000个数据包后就退出程序。
tcpdump -v –i eth0 -c 1000 -w 123.cap
读取数据包文件,匹配显示 tcp的22端口数据
tcpdump -r /root/123.cap tcp and port 22 -v
=========================
使用tcpdump抓取交换机连接的端口
有时候需要知道服务器连接到了哪个交换机的哪个端口。这是如果连接的交换机支持LLDP或CDP协议,并启用了该协议。那我们就可以用过tcpdump来抓取物理连接信息。
对于LLDP,协议号是0x88cc。于是我们可以使用以下tcpdump命令来抓取到我们想要的信息。
tcpdump -i eth0 ether proto 0x88cc -A -s0 -t -c 1
对于使用CDP协议的交换机,一般是Cisco的交换机。可以使用下面命令。即把LLDP的协议号换成CDP的协议号0x2000
tcpdump -i eth0 ether proto 0x2000 -A -s0 -t -c 1
tcpdump 的高级用法
使用tcpdump抓取HTTP报文(注意tcp[20:2] 其中2应该表示的是两个16进制位)
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
#0x4745 这是十六进制表达式,0x表示十六进制,47=G,45=E,意思是GE
#0x4854 这是十六进制表达式,0x表示十六进制,48=H,54=T,意思是HT
#-XvvennSs 0 表示完全显示,就类似wireshark的三分栏
抓192.168.1.123的80端口和110和25以外的其他端口的包
tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110
抓取主机1.1.1.1和所有主机(除20.20.20.8)的通信数据包
tcpdump host 1.1.1.1 and !20.20.20.8
抓取主机1.1.1.1与192.168.1.5的通信,或则1.1.1.1与192.168.2.3的通信
tcpdump host 1.1.1.1 and \(192.168.1.5 or 192.168.2.3 \)
抓取源ip是172.16.1.2且目的端口是22,或源ip是172.16.1.65且目的端口是80的数据包。
tcpdump -v -i eth0 \( src host 172.16.1.2 and dst port 22 \) or \( src host 172.16.1.65 and dst port 80 \)
抓取源ip是172.16.1.59且目的端口是22,或源ip是172.16.1.68且目的端口是80的数据包。(上面和这种写法建议写成这种)
tcpdump -i eth0 -v 'src host 172.16.1.59 and dst port 22' or ' src host 172.16.1.68 and dst port 80 '
每隔60秒保存一次数据包文件,文件名是以年-月-日_时:分:秒.cap的形式进行命名的,一致持续抓包,持续保存数据包
tcpdump -G 60 -s 0 -i eth0 -w ip_%Y-%m-%d_%H:%M:%S.cap
#-G 指定间隔60秒,与-w 文件名中的时间变量一同使用,就是隔60秒,保存一个文件
tcpdump如何分割pcap数据包
tcpdump -r /root/123.cap -c 1000 -w out-123.cap
#将123.cap前一千个数据包导出保存为新的 文件 out-123.cap(这个文件可以使用wireshark直接打开)
更多关于数据包分析过滤案例,请参考该文章:
linux如何对pcap数据包进行分割与合并、过滤与分析等操作
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论