linux的tcpdump命令
一、前言
在工作中经常使用tcpdump命令定位tcp、udp、ftp和http等协议的请求的问题,在请求异常问题中日志繁多或者日志缺少,问题定位比较麻烦,通过tcpdump抓包请求比较准确,并且,并不是所有服务间的请求都有链路跟踪,所以通过tcpdump抓包请求是比较好的方式。
二、tcpdump命令简介
简介:
tcpdump
是一个在Linux系统中非常强大的网络数据包捕获工具,它允许用户捕获并分析网络上的数据包,这对于网络监控、故障排查、安全审计等任务非常有用。tcpdump的基本语法和功能非常丰富,支持多种选项和过滤器,使得用户可以根据具体需求灵活地捕获、显示和过滤网络数据包。
数据包:数据包是在网络上传输的基本单位,包含了网络通信的信息,如源地址
、目标地址
、协议类型
、数据内容
等。
语法:
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
参数说明:
-a 尝试将网络和广播地址转换成名称。
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F<表达文件> 指定内含表达方式的文件。
-i<网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-D 列出可用的网络接口
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r<数据包文件> 从指定的文件读取数据包数据。
-s<数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w<数据包文件> 把数据包数据写入指定的文件。
三、tcpdump常用命令
1、监听所有网卡所有包
tcpdump
2、监听指定网卡的包
tcpdump -i ens18
3、监听指定IP的包
tcpdump host 192.168.1.11
4、监听指定来源IP
tcpdump src host 192.168.1.11
5、监听目标地址IP
tcpdump dst host 192.168.1.11
6、指定网络接口(使用-D选项列出tcpdump可以使用的网络接口)
tcpdump -D
7、监听指定端口
tcpdump port 80
tcpdump port 80 or port 443 #多端抓包
8、监听TCP
tcpdump tcp
9、监听UDP
tcpdump udp
10、监听192.168.1.11的tcp协议的80端口的数据包
tcpdump tcp port 80 and src host 192.168.1.11
11、监听IP之间的包
tcpdump ip host 192.168.1.11 and 192.168.1.60
12、监听除了与192.168.1.4之外的数据包
tcpdump ip host 192.168.1.60 and ! 192.168.1.4
13、捕获指定数量的数据包
tcpdump -c 10
这个命令会捕获10个数据包,然后停止。
14、将抓取的数据写入文件
tcpdump -i eth0 -s0 -w test.pcap
-s0设置了数据包截取大小为无限制。
15、抓取特定主机的数据
使用过滤器 host 可以抓取特定目的地和源 IP 地址的流量。 $ tcpdump -i eth0 host 10.10.1.1 #也可以使用 src 或 dst 只抓取源或目的地: $ tcpdump -i eth0 dst 10.10.1.20
16、抓取 HTTP GET 流量
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
17、抓取 HTTP POST 请求流量
tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
18、提取 HTTP 请求的主机名和路径
tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"
注:tcpdump是linux命令的一部分,linux命令可参考链接
----------------------------------👇👇👇注:更多信息请关注公众号获取
👇👇👇-------------------------------------------