1.背景
当涉及网络分析和故障排除时,tcpdump和Wireshark是两个非常有用的工具。最近因为工作的原因刚好用到了这两个,故写篇文章记录下。
2.tcpdump介绍
当需要在命令行环境下进行网络数据包捕获和分析时,tcpdump
是一个非常有用的工具。它可以捕获和展示网络流量,用于故障排除、网络监控、协议分析等目的。
以下是关于tcpdump的详细介绍以及使用举例:
安装和基本用法:
-
安装:tcpdump通常在大多数Linux和Unix-like操作系统上预装,或者用户可以使用系统包管理器进行安装。
-
基本用法:
tcpdump
命令的基本语法如下:tcpdump [options] [expression]
options
:用于配置捕获的选项,例如-i
指定网络接口,-n
禁用名称解析,等等。expression
:用于过滤捕获的数据包,例如根据源/目标IP、端口号、协议等。
示例用法:
-
捕获所有网络流量:
sudo tcpdump -i eth0
这将在网络接口
eth0
上捕获所有流量,并将其输出到终端。 -
捕获特定端口的流量:
sudo tcpdump -i eth0 port 80
这将捕获在端口 80 上的网络流量。
-
使用过滤表达式:
sudo tcpdump -i eth0 host 192.168.1.100
这将捕获与 IP 地址
192.168.1.100
有关的所有流量。 -
保存输出到文件:
sudo tcpdump -i eth0 -w output.pcap
这将把捕获的流量保存到名为
output.pcap
的文件中,以供稍后分析。 -
显示捕获数据包的内容:
sudo tcpdump -i eth0 -A
使用
-A
选项,可以显示捕获数据包的 ASCII 文本内容。 -
显示捕获数据包的十六进制内容:
sudo tcpdump -i eth0 -XX
使用
-XX
选项,可以以十六进制和 ASCII 组合的方式显示数据包内容。 -
组合过滤条件:
sudo tcpdump -i eth0 host 192.168.1.100 and port 22
这将捕获源或目标 IP 为
192.168.1.100
,且端口为 22(SSH)的流量。 -
更复杂的过滤条件:
sudo tcpdump -i eth0 'tcp[13] & 2 != 0'
这将捕获所有设置了 SYN 标志的 TCP 数据包,用于捕获 TCP 连接的建立。
这些只是 tcpdump
的一些基本用法示例。用户可以根据自己的需求和网络分析目标,使用不同的选项和过滤条件来进行更详细和精确的数据包捕获和分析。请注意,在使用 tcpdump
时可能需要超级用户权限(使用 sudo
)。
3.wireshark介绍
Wireshark是一个开源的网络协议分析工具,用户可以使用它来捕获、分析和可视化网络数据包。它提供了一个直观的图形界面,使用户能够深入研究不同网络层的协议交互,以便于故障排除、安全审计、性能优化等。
安装就不说了,在浏览器搜下下载一个即可。
Wireshark的主要特点包括:
-
捕获流量:用户可以在实时中捕获网络流量,或者打开保存在文件中的数据包进行离线分析。
-
协议解码:Wireshark可以解码并展示多种网络协议的内容,使用户能够深入了解协议的工作原理和交互过程。
-
强大的过滤:用户可以使用过滤器来筛选和显示特定类型的数据包,从而专注于感兴趣的流量。
-
定制化显示:用户可以自定义显示选项,包括颜色编码、列排列等,以便更好地分析数据包。
-
统计和图表:Wireshark提供了统计信息和图表,帮助用户了解流量模式、数据包大小分布等。
-
导出功能:用户可以将捕获的数据包或分析结果导出为不同格式的文件,如CSV、XML等。
Wireshark的使用举例:
-
捕获网络流量:用户打开Wireshark,选择所需的网络接口,然后开始捕获网络流量。用户可以看到实时的数据包流,并可以停止捕获。
-
分析HTTP请求:用户可以使用Wireshark捕获HTTP请求和响应,以查看Web浏览器和服务器之间的交互,包括URL、请求头和响应内容。
-
检查DNS查询:用户可以捕获DNS流量,以查看域名解析的过程,包括查询和响应,以及解析所需的时间。
-
分析VoIP通话:用户可以捕获VoIP(Voice over IP)通话流量,以查看语音通话的音频流和控制协议。
-
查找网络故障:用户可以捕获特定主机之间的通信,以识别网络连接问题,如延迟、丢包等。
-
监视网络流量:用户可以长时间运行Wireshark,监视网络上的流量模式,检查是否存在异常活动。
-
分析安全事件:用户可以检查网络流量,以发现潜在的恶意活动,如网络攻击、恶意软件传播等。
当使用Wireshark进行网络数据包分析时,可以使用过滤器来筛选并显示感兴趣的数据包(在wireshark左上角)。以下是一些常用的Wireshark过滤报文的命令示例:
-
IP地址过滤:
ip.addr == 192.168.1.1
:显示与指定IP地址有关的数据包。ip.src == 192.168.1.1
:显示源IP地址为指定IP的数据包。ip.dst == 192.168.1.1
:显示目标IP地址为指定IP的数据包。
-
协议过滤:
tcp
:显示所有TCP协议的数据包。udp
:显示所有UDP协议的数据包。http
:显示所有HTTP协议的数据包。
-
端口过滤:
tcp.port == 80
:显示使用80端口的TCP数据包(通常是HTTP)。udp.port == 53
:显示使用53端口的UDP数据包(通常是DNS)。
-
组合条件:
ip.addr == 192.168.1.1 && tcp.port == 80
:显示源或目标IP为192.168.1.1且端口为80的数据包。
-
数据包长度过滤:
frame.len > 100
:显示长度超过100字节的数据包。
-
过滤特定协议字段:
http.request.method == GET
:显示所有使用HTTP GET方法的请求数据包。http.response.code == 200
:显示所有HTTP响应状态码为200的数据包。
-
使用显示过滤器:
Wireshark还提供显示过滤器,可用于临时隐藏某些数据包而不实际过滤它们出去。例如,在过滤器框中输入ip.addr == 192.168.1.1
,然后右键点击这个过滤器并选择“Apply as Filter -> Selected”。 -
搜索报文内容:
可以使用contains搜索报文中的内容:
# 要搜索包含关键字 "password" 的数据包,可以输入:
frame contains "password"
# 如果要搜索在HTTP负载中包含关键字 "username" 的数据包,可以输入
http contains "username"
4.tcpdump和wireshark简单结合使用
环境:
- 1.在Redhat 7.9上安装了mysql 5.7
- 2.在Redhat 7.8上使用tcpdump抓包
- 3.在windows上使用navicate连接mysql,并执行SQL语句
- 4.在windows 10上使用wireshark分析包
先在linux上简单粗暴的直接对ens33网卡抓包(不知道是哪个网卡可以执行ifconfig看看):
tcpdump -i ens33 -w ens33.pcap
在navicat执行简单的插入和删除操作:
使用wireshark打开前面抓的包:
在左上角输入过滤条件,过滤指定ip的内容:
组合条件过滤,过滤前面执行的SQL的关键字:
其它功能,比如双击报文,可以显示详细的报文详情:
或者右键,选择 “追踪流>>TCP流”,可以得到跟这个包有关的所有报文跟踪: