作者:佚名 时间:2023-12-21 09:19:31 阅读:(4)
tcpdump是一个强大的命令行工具,可以捕获和分析网络流量。我们在Linux中可以使用tcpdump工具来抓取网络数据包。接下来云梦编程就为大家详细的介绍一下linux使用tcpdump抓包工具抓取网络数据包的方法,有需要的小伙伴可以参考一下:
yum install tcpdump
tcpdump [options] [expression]
其中,options 是可选参数,用于指定不同的抓包选项,expression 是可选的过滤表达式,用于筛选特定的网络流量。
参数 | 介绍 |
---|---|
-i | 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口,则无需指定。 |
-nn | 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。 |
-s0 | tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。 |
-v | 使用 -v,-vv 和 -vvv 来显示更多的详细信息,通常会显示更多与特定协议相关的信息。 |
port 80 | 这是一个常见的端口过滤器,表示仅抓取 80 端口上的流量,通常是 HTTP。 |
-p | 不让网络接口进入混杂模式。默认情况下使用 tcpdump 抓包时,会让网络接口进入混杂模式。一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。如果设备接入的交换机开启了混杂模式,使用 -p 选项可以有效地过滤噪声。 |
-e | 显示数据链路层信息。默认情况下 tcpdump 不会显示数据链路层信息,使用 -e 选项可以显示源和目的 MAC 地址,以及 VLAN tag 信息。 |
-w | 用来把数据报文输出到文件 |
Proto 过滤器 | Proto 过滤器用来过滤某个协议的数据,关键字为 proto,可省略。proto 后面可以跟上协议号或协议名称,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp 和 tcp。因为通常的协议名称是保留字段,所以在于 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。 |
(1)、抓取指定网络接口的所有数据包:
tcpdump -i eth0
(2)、抓取指定源或目标IP地址的数据包:
tcpdump host 192.168.2.1
(3)、抓取指定端口号的数据包:
tcpdump port 80
(4)、结合过滤条件,抓取特定源 IP 和目标端口的数据包:
tcpdump src 192.168.0.1 and dst port 22
(5)、将抓到的数据包保存到文件中:
tcpdump -i eth0 -w test.pcap
(6)、抓取所有发往网段 192.168.2.x 或从网段 192.168.2.x 发出的流量:
tcpdump net 192.168.2
(7)、抓取所有发往网段 10.x.x.x 或从网段 10.x.x.x 发出的流量:
tcpdump net 10
(8)、监听除某个端口外的其它端口:
tcpdump -i eth0 -nnA '!port 22'
如果需要排除某个端口或者主机,可以使用“!”符号,上例表示监听非22端口的数据包。
(9)、监听指定主机和端口:
tcpdump -i eth0 -nnA 'port 80 and src host 192.168.1.231'
多个条件可以用and,or连接。上例表示监听192.168.1.231主机通过80端口发送的数据包。
(10)、从HTTP请求头中提取HTTP用户代理:
tcpdump -nn -A -s1500 -l | grep "User-Agent:"
(11)、通过egrep可以同时提取用户代理和主机名(或其他头文件):
tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'
(12)、抓取 HTTP GET 流量:
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
(13)、抓取 HTTP POST 请求流量:
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
(14)、提取 HTTP 请求的主机名和路径:
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
(15)、提取Set-Cookie(服务端的 Cookie)和Cookie(客户端的 Cookie):
tcpdump -nn -A -s0 -l | egrep -i 'Set-Cookie|Host:|Cookie:'
(16)、切割pcap文件:
tcpdump -w /tmp/capture-%H.pcap -G 3600 -C 200
当抓取大量数据并写入文件时,可以自动切割为多个大小相同的文件。例如,下面的命令表示每 3600 秒创建一个新文件 capture-(hour).pcap,每个文件大小不超过 200*1000000 字节,这些文件的命名为 capture-{1-24}.pcap,24 小时之后,之前的文件就会被覆盖。
(17)、可以通过过滤器 ip6 来抓取 IPv6 流量,同时可以指定协议如 TCP:
tcpdump -nn ip6 proto 6
(18)、从之前保存的文件中读取 IPv6 UDP 数据报文:
tcpdump -nr ipv6-test.pcap ip6 proto 17
以上仅是一些基本的 tcpdump 命令示例,你可以根据需要调整参数和过滤条件来进行更详细的抓包操作。请注意,在使用 tcpdump 时需要具备足够的权限,通常需要以管理员身份运行命令。