tcpdump会在网络接口抓取匹配布尔表达式的包,并将包的描述内容打印出来。如果系统中没有tcpdump,需要手工安装一下。本文以Centos6.5为基础进行讲解,安装tcpdump的命令:yum install -y tcpdump
在讲抓包以前,首先需要了解一下网卡的工作模式。网卡有四种模式:
广播模式(Broadcast):网卡接收广播数据
多播模式(Multicast):网卡接收多播数据
单播模式(Unicast):网卡只接收目的mac为自己的数据
混杂模式(Promiscuous):网卡接收所有通过它的数据,不管目的mac是不是自己。
通过对网卡模式的描述,我们知道,如果要抓取目的mac地址不为自己的数据包,需要开启网卡的混杂模式,windows中网卡没有模式的概念,由应用程序本身决定网卡的功能。
如果使用SSH登录到远程Linux,运行tcpdump,会发现抓到大量的数据包,这是因为tcpdump将抓到的包发送给远端,同时又抓了这个包,再显示,再抓取,造成了循环抓取。通过ctrl+c退出即可。
tcpdump的使用可以接一些可选参数
-D显示可以通过哪几个网卡抓包
# tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.eth1
5.any (Pseudo-device that captures on all interfaces)
6.lo
-i 后接网卡名字,指定抓哪一个网卡的包
tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
-w 将抓取的数据保存为文件
tcpdump -i eth1 -w test5.cap
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
-r 读取通过-w参数保存的文件
# tcpdump -r test5.cap |grep ssh
reading from file test5.cap, link-type EN10MB (Ethernet)
15:37:39.578895 IP 192.168.56.102.ssh > 192.168.56.1.50480: Flags [P.], seq 2289452744:2289452920, ack 252499783, win 153, length 176
15:37:39.579071 IP 192.168.56.1.50480 > 192.168.56.102.ssh: Flags [.], ack 176, win 256, length 0
15:37:49.814141 IP 192.168.56.1.50480 > 192.168.56.102.ssh: Flags [P.], seq 1:97, ack 176, win 256, length 96
信息简单分析如下:
15:37:39 时间
578895 ID
IP 192.168.56.102.ssh > 192.168.56.1.50480 表示从192.168.56.102的ssh端口发送到192.168.56.1的50480端口的数据
Flags 是TCP报文中的标志信息
seq TCP报文的序列号
ack 确认序列号,希望下次收到的序列号
win 窗口大小
length 包的长度
-c 收到多少个数据包后退出
# tcpdump -c 3 -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
16:04:06.258916 IP 192.168.56.102.ssh > 192.168.56.1.50480: Flags [P.], seq 2289463272:2289463512, ack 252506311, win 153, length 240
16:04:06.259849 IP 192.168.56.1.50480 > 192.168.56.102.ssh: Flags [.], ack 240, win 253, length 0
16:04:06.380007 IP 192.168.56.102.ssh > 192.168.56.1.50480: Flags [P.], seq 240:560, ack 1, win 153, length 320
3 packets captured
3 packets received by filter
0 packets dropped by kernel
-f 用数字的形式显示外部地址
-n 不把地址转换成名字
-N 不显示主机名字中的域名部分
-q 快速输出
-t 禁止显示时间戳
tcpdump 后可以使用过滤器来过滤抓取哪些数据包,主要通过BPF语言来使用。
BPF语言主要有一个标志和限定词组成,限定词有三种
第一种:指定类型
host:可以指定主机的IP或MAC
net:可以指定网络号,只给出网络号就可以,比如 tcpdump net 10.1.1 tcpdump会通过网络判断这是一个C类地址
port:指定端口
portrange:指定端口范围
第二种:指定方向
src:指定源主机或网络
dst:指定目的主机或网络
第三种:指定协议
主要包括ether,fddi,ip,ip6,arp,,rarp,tcp等