云梦编程网

当前位置:首页 > Liunx教程 >

linux tcpdump命令详解

作者:佚名 时间:2023-12-21 09:19:31 阅读:(4)

tcpdump是一个强大的命令行工具,可以捕获和分析网络流量。我们在Linux中可以使用tcpdump工具来抓取网络数据包。接下来云梦编程就为大家详细的介绍一下linux使用tcpdump抓包工具抓取网络数据包的方法,有需要的小伙伴可以参考一下:

linux tcpdump命令详解

1、安装tcpdump

yum install tcpdump

2、语法格式

tcpdump [options] [expression]

其中,options 是可选参数,用于指定不同的抓包选项,expression 是可选的过滤表达式,用于筛选特定的网络流量。

3、相关参数:

参数 介绍
-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 只需要一个。

4、相关实例:

(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 时需要具备足够的权限,通常需要以管理员身份运行命令。

最新文章

热门文章