目录
(6)在网卡eth0上抓取报文,报文的IP地址是10.0.2.15,不限制长度
一、基础知识
1、功能:输出网络上的数据报文
2、局限性:tcpdump可视化输出功能有限,可以通过捕获报文并且保存下来,然后使用图形用户界面软件wireshark来分析。
二、格式说明
1、常用的选项
-i <interface>:指定监听的物理网卡接口
-s:截取每个报文中截取的数据长度
-w <filename>:把原始报文保存到文件中
-c:收到指定报文个数后退出,可当作软件执行结束的条件
-G <rotate_seconds>:每隔指定的时间,将捕获的报文循环保存为新文件
-D :输出tcpdump可以捕获的接口列表,包含接口编号和接口名称
-v:当解析和打印时,输出详细的信息,例如报文的生存时间TTL、ID等IP报文选项
-p:禁止本命令把接口修改为混杂模式(将抓取和本机通信的报文,注意接口有困难因其他原因而处于混杂模式)
-r:从文件中读取报文(文件是由“-w”选项抓包创建的)
2、时间格式
%d:每月中的第几天,十进制数字从01-31
%H:当前小时时间,00-23
%M:当前分钟时间,00-59
%S:当前秒时间,00-60
3、过滤规则
1、共四个类型的修饰符:host(需要获取报文的主机或IP地址)、net(需要捕获报文的子网)、port(端口)、portrange(端口范围)
2、传输方向修饰符:src和dst
3、协议修饰:特定协议:IP、ARP、RARP、ICMP、TCP、UDP
and(&&)、or(||)、not(!)
三、常见报文过滤表达式
host bjbook.net |
捕获和主机 bjbook.net交互的数据包,包含到达和来源的报文 |
net 191.0.0.0/24 |
捕获指定网段191.0.0.0/24 范围内的数据包 |
port 20 |
捕获指定端口20的数据包,指定TCP或UDP协议端口匹配,端口号可以是数字也可以是一个名称,这个名称在/etc/services文件中和端口号数字相对应,例如 port http 则匹配80端口的所有流量,包括 TCP和UDP 80端口的流量 |
portrange 8000-8080 |
捕获端口范围8000~8080的数据包 |
dst port 80 |
捕获目的端口为80的报文,包含UDP和 TCP报文,dst 指明报文的方向,也可以修饰主机名和P地址 |
src 192.168.6.100 |
捕获源IP为192.168.6.100的报文,src 也可以修饰传输层端口号 |
ip multicast |
IPv4组播报文,即目标地址为组播地址的报文 |
arp |
只捕获ARP协议报文,不包含IP报文 |
ip |
捕获IP协议报文,不包含ARP等协议报文 |
udp port 53 |
指定UDP协议并且端口为53,即是 DNS 协议的报文 |
port 5060 or port 53 |
指定端口为5060或端口为53的报文,这在使用IP电话时经常用到 |
not host bjbook.net |
所有非主机 bjbook.net的报文 |
port 5060 and (host 192.168.6.100 or 192.168.6.102) |
端口5060的报文,并且满足IP地址是192.168.6.100或192.168.6.102,使用括号来改变结合的优先级 |
四、抓包
1、过滤规则包
(1)抓取指定IP地址数据包: tcpdump -i eth0 (src/dst) host 192.168.1.100
(2)抓取主机与特定IP(192.168.1.200 或192.168.1.201)通信包
tcpdump -i eth0 host 192.168.1.100 and \(192.168.1.200 or 192.168.1.201\)
(3)抓取主机与特定IP(192.168.1.200 或192.168.1.201)通信包
tcpdump ip host 192.168.1.100 and !192.168.1.200
(4)抓取特定端口数据包:tcpdump -i eth0 (src/dst) port 22
(5)抓取特定网段数的数据包:tcpdump -i eth0 (src/dst) net 192.168
(6)抓取特定协议数据包: tcpdump -i eth0 arp/ip/tcp/udp/icmp
(7)指定网卡:tcpdump -i eth0
(7)条件组合过滤抓包
tcpdump '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.1)))'
tcpdump -i eth0 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.1)))'
tcpdump '((icmp) and ((ether dst host 00:0A:0B:03:0C:05)))'
tcpdump '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.254))'
2、筛选
(1)不解析域名以IP地址显示第三列的内容,sort -u去重
tcpdump -n -r test.cap | awk '{print $3}'| sort -u
(2)筛选源IP为192.168.1.100的包:tcpdump -n src host 192.168.1.100 -r test.cap
(3)筛选目的IP为192.168.1.100的包:tcpdump -n dst host 192.168.1.100 -r test.cap
(4)筛选端口为50的包:tcpdump -n port 53 -r test.cap
3、其他报文
(1)保存到指定文件名字
tcpdump -i eth0 -s 1500 -G 60 -W zhang%H%M%S.cap
(2)不进行地址到域名的转换(-n)
tcpdump -i eth0 -n -vv -c 500(抓取eth0接口的全部报文并输出到屏幕中,不进行地址到域名的转换(-n),在抓取500个后退出)
(3)端口为80
tcpdump -i eth0 ’dst port 80‘ -v
(4)指定源IP和某个端口
tcpdump -i eth0 ’port 5060 and src 192.168.6.100‘ -v
(5)UDP端口53(即DNS)
tcpdump udp and port 53 -v
(6)在网卡eth0上抓取报文,报文的IP地址是10.0.2.15,不限制长度
tcpdump -i eth0 -s0 -w zhang.pcap host 10.0.2.15
五、常识
1、路由器通常有两个接口,eth0连接互联网,eth1连接局域网,将报文的全部内容保存到某个文件中
2、在系统启动时,ARP协议来请求目标IP地址的MAC地址,但这个IP地址并非和本地机器同网段,这在网关机器带有ARP代理情况下工作正常,但是如果下一跳路由器没有ARP代理,就会因为没有目标IP的 MAC响应而通信失败。我们在启动时就可以仅抓取ARP协议、TFTP协议、DNS协议及ICMP协议。
tcpdump -i eth0 -w aaa.pcap port 59 or port 53 or port 80 or arp or iomp该命令将抓取TFTP协议、DNS协议、HTTP协议、ARP协议和 ICMP协议的报文。