一、网络抓包工具分析
网络抓包是网络分析和故障排查中的一个重要技术,而Wireshark是最常用的网络抓包工具之一。下面我将介绍一下网络抓包的基本概念以及Wireshark的作用。
网络抓包概念
1. 什么是网络抓包?
网络抓包是指通过捕获和分析网络上流动的数据包来监控、诊断和优化网络的过程。网络数据包是网络通信的基本单位,每个数据包包含了从源到目的地的所有通信信息。
2. 为什么要进行网络抓包?
故障排查:识别和解决网络问题,如连接中断、延迟或数据丢失。
性能优化:分析网络性能,找到瓶颈并进行优化。
安全分析:检测恶意活动或数据泄露,增强网络安全。
协议分析:了解和验证网络协议的行为。
3. 数据包的基本组成
头部:包含关于数据包来源、目的地、协议类型等信息。
有效载荷:实际传输的数据内容。
Wireshark概述
1. 什么是Wireshark?
Wireshark是一款开源的网络协议分析工具,用于捕获和分析网络流量。它允许用户查看网络中传输的每一个数据包的详细信息,支持多种网络协议的解码和分析。
2. Wireshark的主要功能
实时捕获:可以在网络中实时捕获数据包。
数据包分析:提供对数据包的详细分析,包括协议层次、字段信息等。
过滤和搜索:允许用户设置复杂的过滤器来仅查看感兴趣的数据包。
可视化:提供多种图表和统计信息来帮助理解网络流量。
导出和保存:可以将捕获的数据导出为多种格式,方便后续分析和分享。
3. 使用Wireshark的基本步骤
启动Wireshark:打开应用程序并选择要监控的网络接口。
开始捕获:点击“开始捕获”按钮,Wireshark将开始记录网络流量。
分析数据包:观察数据包列表,使用过滤器来查找特定的数据包。
查看详细信息:点击某个数据包查看其详细内容和协议层级。
保存和导出:将捕获的数据保存到文件中以便后续分析或分享。
4. 实践建议
熟悉过滤器:Wireshark的过滤器功能非常强大,学会使用过滤器可以更高效地定位问题。
注意隐私和法律:捕获和分析网络流量时需确保符合隐私法规和法律要求,避免未经授权的网络监控。
二、安装
windows:
https://www.wireshark.org/
linux版本:终端输入
sudo apt install wireshark
安装完成之后界面:
tips:在linux下面的Ubuntu中,在ubuntu中启动时,由于wireshark需要管理员才能抓取网口数据,因此需要使用 sudo 在命令行终端启动,输入:
gec@ubuntu:~$ sudo wireshark
1.基本使用步骤
初次使用 wireshark 都会感觉其功能强大,界面复杂,学习门槛高,但如果仅限于使用其来抓取对应网卡数据包,用于学习、验证各种不同网络协议通过真实物理设备时的数据封装形式,则其应用并不困难。总体而言,只需掌握如下几点便可:
1.选择正确的监控网络接口
2.编写正确的捕获、显示过滤器
3.认识如何查看数据包,尤其是通信协议的内容
一)网络接口的选取
在wireshark的起始界面,首先要选择需要监控的网卡:
假设在A同学的虚拟机ubuntu-1中运行一个网络通信测试用例,在另一位B同学的虚拟机ubuntu-2中运行对端网络通信测试用例,那么它们之间的网络数据必然会通过物理机中的真实网卡,那么只需在windows版本的wireshark中监控某个网卡即可。具体而言:
- 如果虚拟机是桥接模式,那么就监控虚拟机所桥接的网卡
- 如果虚拟机是NAT模式,那么就监控VMnet8
如果是某同学自己的同一台虚拟机ubuntu中,启动了两个网络通信测试用例,那么这些网络数据将不会通过任何物理真实网卡,甚至也不会通过任何虚拟网卡,而仅仅通过虚拟机ubuntu中的本地回环设备 lo 进行传递,因此这种情况下如果想要抓包分析,那么一般需要安装ubuntu的wireshark,并且使之监控ubuntu中的 lo 网卡。
二)筛选表达式的编写
如下图所示,在指定某个监控网卡之后,如果该网卡处于活跃状态,一般会发现从网卡通过的数据包会非常多,使得目标数据包难以被发现,因此一般需要编写 过滤器表达式 来捕获符合条件的数据包。
wireshark支持两种过滤器,一是捕获过滤器,一是显示过滤器,顾名思义,捕获过滤器在过滤之前就做出筛选,直接无视不符合要求的数据包,这样能节约大量磁盘空间资源,而显示过滤器则是在捕获了的数据包的基础上,再对显示列表做进一步筛选,这两种过滤器的位置如下图所示:
wireshark两种常用过滤器
示例1:
设置捕获过滤器,使之只捕获TCP协议且端口号包含50001(即源端端口或目的端端口)的数据包:
tcp port 50001
设置捕获过滤器
示例2:
设置显示过滤器,使之只显示TCP协议且端口号包含50001(即远端端口或目的端端口)的数据包
tcp.port == 50001
wireshark显示过滤器
一条基本的过滤器表达式由过滤项、过滤关系和过滤值构成,比如 ip.addr == 192.168.1.100 这个表达式中:
- ip.addr 是过滤项
- == 是过滤关系
- 192.168.1.100 是过滤值
整个表达式的意思是:找出所有IP协议中源主机或目标主机的IP地址等于192.168.1.100的数据包。
过滤项:
过滤项一般的构成是由 协议.协议字段 构成。
- 协议
- eth
- ip
- tcp
- udp
- snmp
- icmp
- ftp
- http
- telnet
- oicq
- 字段(该协议下的关键属性)
- addr
- port
- dstport
- payload
- ack
因此他们的组合可以是:
tcp.port == 50001
udp.dstport >= 1024
oicq.qqid == 2437231462
过滤关系:
过滤关系就是大于、小于、等于这些逻辑关系,在显示过滤器中有两种写法,一种是英文模式,一种是代码模式,比如过滤端口为50001的写法可以是以下两种写法之一:
tcp.port == 50001
tcp.port eq 50001
具体的写法可以参考官方给定的下图:
过滤值:
过滤值就是设定的过滤项应该满足的标准,一些具体的数值。
wireshark其他更深入的教程,有兴趣的话可以参考官方手册:
https://www.wireshark.org/docs/wsug_html/#DispCompOps