首页 > 其他分享 >抓包工具使用

抓包工具使用

时间:2024-12-19 13:56:00浏览次数:5  
标签:eq 端口 TCP 过滤 tcp 使用 工具 数据包 抓包

抓包工具使用

注:下文就一个普通网工使用wireshark分析网络质量、故障等而言常用的场景说明,协助个人如何判断网络问题。你不需要点开每个数据包查看具体字段,只需要大概看一下判断原因,就个人工作经验总结,可能并不完整,后续慢慢补充。

(一)、软件界面说明调整

1.1 流量获取

流量可以来自你本地自己的网卡,也可以来自网络设备的端口镜像,或者来自其它网络设备保存下来的流量导入分析。

image-20241219090646736

1.2 界面说明

wireshark会根据自身附带的着色规则把常见类型数据包着色成不同的颜色,着色规则也可自行定义规则,但依我个人而言系统自带的着色规则已经满足个人需求,不建议修改,需要注意的是一般越是醒目的颜色就越值得被你关注,可根据下方表格理解大概含义。

image-20241219091330968

序号 规则 含义
1 Bad TCP TCP解析出错,即重传,乱序,丢包,重复响应都在此条规则的范围内。
2 HSRP State Change 热备份路由协议(Hot Standby Router Protocol),这条规则表示状态非active和standby。
3 Spanning Tree Topology Change 生成树协议的状态标记为0x80,生成树拓扑发生变化。
4 OSPF State Change OSPF(Open Shortest Path First,开放式最短路径优先协议)的msg类型不是hello。
5 ICMP errors ICMP协议错误,协议的type字段值错误。
6 ARP ARP协议。
7 ICMP icmp协议。
8 TCP RST TCP流被RESET(重置)。
9 SCTP ABORT 串流控制协议的chunk_type为ABORT(6)。
10 TTL low or unexpected TTL异常。
11 Checksum Errors 条件中的各类协议的checksum异常,在PC上抓包时网卡的一些设置经常会使Wireshark显示此错误。
12 SMB Server Message Block类协议。
13 HTTP HTTP协议,这是很简陋的识别方法。
14 DCERPC 分散式运算环境/远端过程调用(Distributed Computing Environment / Remote Procedure Calls)协议。
15 Routing 路由类协议
16 TCP SYN/FIN TCP连接的起始和关闭。
17 TCP TCP协议。
18 UDP UDP协议。
19 Broadcast 广播数据。
20 System Event 系统事件。

1.3 流量过滤

流量获取之后就是需要从中检索出自己关注的流量包,依我个人工作经验而言,就我们普通网工来说我们网络中一般就关注IP、端口、协议这三个信息,wireshark附带很多其它额外的过滤规则,如http请求方式、请求url等等,这里就IP、端口、协议来总结常用过滤语句.

不带方向过滤

过滤语句 作用
tcp、udp、arp、icmp、http、smtp、ftp、dns、ssl、ssh 过滤协议。
ip.addr eq <IP地址> 过滤IP地址。
tcp.port eq <端口号> 过滤指定端口。
tcp.stream eq 用于锁定某个TCP会话,过滤出会话的所有流量。
ip.addr in 过滤{}里面的内容,也可以写端口,他们是or的关系.

tcp.stream eq :用于观察某个会话,当你发现某个异常数据包时你想观察该会话交互的所有数据包你就可以使用改方法:

image-20241219131248254

如上图,我这里有个连接重置的数据包,假设我要观察它所在会话从头到尾的所有数据包,我就可以通过索引的数字筛选:

image-20241219131502451

筛选之后可以看到从三次握手开始,一直到了会话断开(连接重置)。

带方向性过滤

过滤语句 作用
tcp.srcport eq <源端口号> 过滤源端口。
tcp.dstport eq <目标端口号> 过滤目标端口。
ip.src eq <源IP> 过滤源IP。
ip.dst eq <目标IP> 过滤目的IP。
ip.src eq <源IP> and tcp.srcport eq <源端口号> and ip.dst eq <目标IP> and ip.dst eq <目标IP> 组合使用。

正常情况下更多时候你是用它来判断两个设备之间通讯是否正常,由于客户端的端口它是随机的,而服务端ip是固定的,所以经常用到的过滤语句百分之八九十也就是:

ip.addr eq <客户端地址> and ip.addr eq <服务端IP> and tcp.port eq <服务端端口>

(二)、异常数据包辨别

2.1 专家信息

过滤出关键流量之后就需要判断是否存在异常数据包,wireshark也携带了一个辅助功能专家信息,它会帮助你统计出异常数据包的个数,可以有效帮助你评估网络质量,你可以在菜单栏分析(A)-->专家信息中找到它。它会按照Waring(警告)、Note(注意)、Chat(提示)帮你罗列出数据包,摘要部分可使用翻译工具翻译具体内容。

image-20241219095316747

2.2 丢包乱序

注:以下数据包是平时捕捉到的常见的异常的数据包,你在网络中能捕捉到这类流量并不代表网络中就存在异常,可以关注的是数据包如果出现的次数过多,有可能就证明网络质量(延迟高、速率慢、拥塞等)有问题,下面已经附带了筛选该类流量的过滤语句。而需要着重关注的是最后一个连接重置,它虽然不一定百分之百证明网络存在连通性问题,但又概率存在该问题,下文有对应说明。

①、丢包或乱序:

​ · [TCP Previous segment not captured]:在 TCP 发送端传输过程中,该 Seq 前的报文缺失了。一般在网络拥塞的情况下,造成 TCP 报文乱序、丢包时,会出现该标志。需要注意的是,[TCP Previous segment not captured] 解析文字是 wireshark 添加的标记并非 TCP 报文内容

tcp.analysis.lost_segment

​ · [TCP Out-Of-Order]:(报文乱序)表示在 TCP 流中,数据包到达的顺序与发送的顺序不一致,即TCP发送端传输过程中报文乱序了。具体原因可能包括网络拥塞、路由变化、负载均衡、硬件或软件问题。

tcp.analysis.out_of_order

​ · [TCP dup ack XXX#X]:(重复确认)表示第几次重新请求某一个包,#前XXX表示第几个包,#后的X表示第几次请求。具体原因可能包括网络拥塞、丢包、乱序。

tcp.analysis.duplicate_ack

②、重传

​ · [TCP Fast Retransmission]:(快速重传)一般快速重传算法在收到三次冗余的Ack,即三次[TCP dup ack XXX#X]后,发送端进行快速重传。

tcp.analysis.fast_retransmission

​ · [TCP Retransmission]:(超时重传)如果一个包的丢了,又没有后续包可以在接收方触发[Dup Ack],或者[Dup Ack]也丢失的情况下,TCP会触发超时重传机制。

tcp.analysis.retransmission

③、滑动窗口

​ · [TCP ZeroWindow]:(零窗口)作为接收方发出现的标志,表示接收缓冲区已经满了,假设接收方处理数据的速度跟不上接收数据的速度,缓存就会被占满,从而导致接收窗口为 0,当发送方接收到零窗口通知时,就会停止发送数据。wireshark 会打上[TCP ZeroWindow]标签

tcp.analysis.zero_window

​ · [TCP window update]:(更新 TCP 窗口)当接收端接收窗口大小发生变化,可以接收数据了,则有该标志。接收方消耗缓冲数据后,更新TCP窗口,可以看到从win=0逐渐变大,这时wireshark会打上[TCP window update]标签。

tcp.window_update

​ · [TCP window Full]:(TCP窗口满)作为发送方的标识,当前发送包的大小已经超过了接收端窗口大小,wireshark 会打上此标识,标识不能再发送。

tcp.analysis.window_full

滑动串口概念不再介绍,可以比喻成ETC通道,数据传输可以理解过程可以比喻成假设有需求:需要从某地运送N辆汽车到另一个地方,这些车需要走当地的ETC,ETC一般有多个窗口,这个ETC窗口可以理解成这里的滑动窗口,而汽车的车牌又可以理解成ACK(确认号),当某辆汽车未按照规定抵达终点,它就会要求重新发送该车辆,而当另一端ETC窗口拥堵时它这边也会调整减少这段发车的速度等等,保证车辆有序完整的运输到对端。

④、连接重置

常见RST介绍
RST(Reset)重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接。常见的RST情况包括:

  1. 端口未打开:服务器程序端口未打开而客户端来连接。这种情况下,去telnet一个未打开的TCP的端口可能会出现这种错误。
  2. 请求超时:查看2次包的时间间隔,如果时间过长,可能会引发请求超时的判断。
  3. 服务端关闭的socket:当服务端关闭了一个socket连接时,会发送RST包给客户端。
  4. 防火墙拒绝请求:防火墙可能会拒绝某些连接请求,导致连接被重置。
  5. 移动链路问题:在移动网络下,国内是有5分钟后就回收信令的限制。如果心跳>5分钟后服务器再给客户端发消息,就会收到RST。
  6. 负载等设备问题:负载设备需要维护连接转发策略,长时间无流量,连接也会被清除,而且很多都不告诉两层机器,新的包过来时才通告RST。Apple push服务也有这个问题,而且是不可预期的偶发性连接被RST;RST前第一个消息write是成功的,而第二条写才会告诉你连接被重置。
tcp.flags.reset eq 1

(三)、常见应用分析场景

3.1 连通性分析

往往有可能会存在那种情况,我们网络测试连通性正常(ping得通),但是指定的端口不通或者说telnet端口能通,但是它的业务不能正常访问,此时你就可以在对应设备(服务端、客户端或者你知道中途流量经过的设备)上抓包,抓包过程使用客户端访问业务(保证能获取到异常的流量包),然后导入wireshark做检查,比如下面:

image-20241219104402406

我的服务端(10.1.1.6)并未监听123端口,我通过客户端(10.1.1.1)telnet服务端的端口时由于端口未监听,这里注意上面说到的方向性,客户端尝试了几次服务端均回复RTS,像这种情况我们就可以定位是服务端端口有异常。

image-20241219105144535

还有一种工作中可能遇到的症状这里无法还原,就是那种中间过了好几个设备,当你telnet测试端口的时候是正常的,但是对应的业务未能正常访问,这里我做个人认为可能原因判断,telnet端口通那说明TCP可以正常握手,但是业务访问异常,可能是途中经过了某个安全设备,它可能带有安全检查的防护功能,TCP连接之后程序交互数据被它认定存在安全隐患,自动帮你阻断了对话,导致你抓取到了RST数据包,要排除该可能就要跳过中间安全设备想办法让客户端和服务端直连,再进行测试。也有可能存在另一种情况,就是两端设备通信时TCP连接之后进入程序交互过程,交互过程中在某个阶段出现了异常,导致协商失败,一端重置了连接,这时候你只需按照先前说的根据数据包判断方向,到底是哪一边重置了连接,和相关人员反馈得清除就可以。

3.2 业务网络结构判断

​ 场景描述:当你清除一个业务系统中服务器或者设备IP,但是你不知道该业务系统运转过程中它使用了哪些端口,以下方法可以帮你有效判断出它通信过程中有哪些端口进行了交互,便于你优化边界安全设备规则或者说定义规则的时候更加细化。该功能使用方法:

第一步还是需要保证你要捕获到流量必须含盖业务系统的流量,你可以还是按照老办法,有可能业务系统中不止一个设备参与保障了业务工作,因此你要挑一处全部流量的必经之路下手,配置镜像至你的电脑上来分析,抓包过程要保证业务正常运转,保证需要交互的流量都被触发。

wireshark分析功能如下:

菜单栏-->统计(S)-->IPv4 Statistics -->Distinations and Ports,字面意思就是它是用来统计端口分布的。

image-20241219112452435

比如我这里,我的服务器(10.1.1.6)上有ssh、http、https、ftp这几个业务,抓包过程中我在客户端(10.1.1.1)把业务都访问个遍:

image-20241219114316159

然后我我通过工具统计端口分布(需要输入过滤语):

image-20241219114635396

我就精准的得到了服务器上哪些端口提供了服务。

当然我这里举得例子可能比较粗糙,像表达的是当有一个复杂的业务系统,可能有C/S架构和B/S架构都有,系统的设备跨网络进行了传输,而你这时候需要在边界设备上做最小化限制,你就可以使用该功能分析得到业务跨网络进行交互用到了哪些端口。

3.3 C/S架构程序抓包

C/S一般你直接打开使用,但是数据交互的的过程你可能没关注,你不知道那个程序进行了什么连接,你也不知道你上面的数据它发到了什么地方去,但是有可能客户的某个程序可能存在问题,有可能也需要用到网络分析,如下我就电脑上的微信为例举例说明:

① 找到程序在系统中的进程号:

先在任务管理器中查看程序名称

image-20241219120257645

在用tasklist命令查找到进程PID,这里为9640,下面还有还几个是因为你的微信启动了小程序、公众号等其它程序:

image-20241219120505809

② 这样你就找到了网络连接信息,第一列是协议,第二列是本地IP和端口,第三列是连接的服务器地址和端口,第三列是状态,状态为ESTABLISHED表示建立连接,LISTENING则表示监听状态,所以这里就是微信连接的服务器地址:

image-20241219120734654

③ 找到关键信息之后你就可以抓取网卡流量,然后过滤上面的连接信息,这时候你尝试发送微信给别人,没发送一次这里就会多出几个数据包。

image-20241219124319925

数据包标识的PSH意思就是:标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付。查找其它程序也是案例照搬,该功能可能不仅对分析某个程序的网络有用,也可能对分析不明软件(疑似病毒)等程序网络交互有所帮助,前提是你要能找得着它。

(四)补充

​ wireshark还附带了许多其它的功能需要探索,掌握它的方方面面实属不易,也不推荐,能够用它来解决日常工作问题才是重要关系。下面仅对我了解到的功能做其它拓展,可作为了解内容。

4.1 流追踪

该功能用于追踪未加密的会话会很管用,比如这里追踪telnet、http和未配置证书和私钥加密的ftp也是同样能直接看到通信过程,捕获敏感信息,这里只是想警戒大家加强安全意识,注意防护该类不安全的传输协议:

image-20241219132615462

image-20241219133616535

image-20241219133817084

4.2 解析IP地理信息

wireshark可以借助Geolite地址库进行IP定位、地图分布可视化,前提是你要先下载Geolite地址库并引用:

image-20241219125850393

在世界地图中呈现:

image-20241219130017691

4.3 网络I/O图表

它可以帮助你观察数据包、TCP错误数据包在不通时间段内的占比关系。

image-20241219130604108

wireshark还附带其它许多有用的功能,感兴趣的可以自己探索。。。

标签:eq,端口,TCP,过滤,tcp,使用,工具,数据包,抓包
From: https://www.cnblogs.com/luguojie/p/18617082

相关文章

  • Linux中,使用 ./ 和 sh 执行脚本的区别是什么
    这些区别主要体现在执行环境、权限要求和子进程管理等方面一.可执行权限(不一样)./:使用./script.sh执行脚本时,脚本必须具有可执行权限。这意味着你需要先使用chmod+xscript.sh命令来赋予脚本执行权限。chmod+xscript.sh./script.shsh:使用shscript.sh执行脚......
  • Vue2 使用wangEditor5 上传图片
    安装:yarnadd@wangeditor/editor#或者npminstall@wangeditor/editor--saveyarnadd@wangeditor/editor-for-vue#或者npminstall@wangeditor/editor-for-vue--save使用:模板<template><divstyle="border:1pxsolid#ccc;">......
  • 使用 C++ 和 Tesseract 实现验证码识别
    安装TesseractOCR首先,你需要安装TesseractOCR库。如果你还没有安装,请按照以下步骤操作:在Ubuntu上安装Tesseract:bashsudoaptupdatesudoaptinstalltesseract-ocrsudoaptinstalllibleptonica-devsudoaptinstalllibtesseract-dev在Windows上安装Tesse......
  • win10下安装配置mysql5.7Windows下使用解压版配置安装MySQL
    1.下载MySQL访问MySQL官方网站下载页面:https://dev.mysql.com/downloads/mysql/选择MySQLCommunityServer(免费版),选择适合Windows的版本(例如,Windows(x86,32-bit),MSIInstaller)。下载安装程序并运行。2.使用msi直接安装MySQL运行下载的安装程序。接受许可协议。在安装类型选......
  • 使用 PHP 和 Tesseract 实现验证码识别
    Tesseract是一个开源的OCR引擎,能识别图像中的文本。我们将通过PHP调用Tesseract来实现验证码的识别。安装PHP和Tesseract首先,确保你的系统中安装了PHP和TesseractOCR。Tesseract安装(Ubuntu):bash更多内容访问ttocr.com或联系1436423940sudoapt-getupdatesud......
  • 可以直接使用模板搭建虚拟展厅么?
    可以直接使用模板搭建虚拟展厅。以下是对这一方式的详细解释:一、模板搭建的可行性许多虚拟展厅搭建平台都提供了丰富的模板供用户选择。比如视创云展平台,就拥有海量展厅模板,适合多种行业使用。这些模板通常已经包含了基本的展厅结构和布局,用户只需在此基础上进行个性化调整,如......
  • 明察秋毫--用ss工具统计网络栈内存使用
    前言本文介绍了用ss工具来统计一下当前网络栈的内存使用情况环境准备组件版本操作系统Ubuntu22.04.4LTS查看socket内存相关参数,-m参数▶ss-tmStateRecv-QSend-QLocalAddres......
  • 获取任意一个进程的共享内存的fd对应的资源,增加引用,实现数据的接管——包含非export的
    一、背景在之前的 memfd配合跨进程传输fd的例子及原理-CSDN博客博客里,我们讲了跨进程通过socket传递fd的底层实现原理,并且给了一个例子来替代socket传输和转换部分的逻辑,直接使用底层fd和file的接口来通过模块ko来实现跨进程的fd的转换和重新映射。这篇博客里,我们继续fd的......
  • RTL8211F以太网千兆RGMII开发板 使用说明
    深圳市飞录科技有限公司www.szfpga.com1.概述    RGMII 开发板主芯片是RTL8211FD。配套国产GOWIN的2AR-18和NR-9C的开发板,测试RGMII的千兆以太网数据发送和接收功能。  开发板的代码是基于MAC模式,通过循环发送计数器来判断包发送和接收是否正确。   2.操......
  • Python中创建使用本地包
    在项目中创建本地包,需要以下几个步骤:1.创建包目录2.在包目录中创建一个init.py文件3.在包目录中创建模块文件4.使用包中的模块下面详细介绍操作步骤1.创建包目录包目录用来存放本包相关的代码。包目录是一个普通的文件夹,但是它包含了一些特定文件和结构,使得Python能够......