zoukankan      html  css  js  c++  java
  • 【工具】564- Wireshark抓包使用指南

    本文来自公众号【前端早读课】,刚好最近自己在学这个工具,觉得这篇文章不错,一起分享给大家~~


    前言

    这篇有点类似工具介绍。这个也是前几天有一个业务场景需要用到才了解的。希望对你的工作有所帮助,知道这个软件就好。今日早读文章由@Ju5tice授权分享。

    正文从这开始~~

    作为一款高效免费的抓包工具,wireshark可以捕获并描述网络数据包,其最大的优势就是免费、开源以及多平台支持,在GNU通用公共许可证的保障范围下,用户可以免费获取软件和代码,并拥有对其源码修改和定制的权利,如今其已是全球最广泛的网络数据包分析软件之一。

    0x01.Wireshark可以做什么

    • 网络管理员使用Wireshark检测网络问题

    • 网安工程师用Wireshark检查信息安全相关问题

    • 开发者使用Wireshark为新的通信协议调试

    • 普通用户使用Wireshark学习网络协议相关知识

    • 憨憨学生使用Wireshark应付TCP/IP课程要求

    0x02.Wireshark不可以做什么

    -Wireshark不是入侵侦测软件(Intrusion Detection Software, IDS)。对于网络上的异常流量行为,Wireshark不会产生警示或是任何提示。然而,仔细分析Wireshark截取的数据包能够帮助用户对于网络行为有更清楚的了解。

    Wireshark不会对网络数据包产生内容的修改 - 它只会反映出当前流通的数据包信息。Wireshark本身也不会提交数据包至网络上。就是说你只能查看数据包,不能修改或转发。

    0x03.哪里下载

    开源软件请去它的官网下载wireshark,有Mac跟Window版

    下载完成后一路next,如果win10系统选择抓包但不显示网卡,需要下载win10pcap兼容性安装包

    0x04.第一个抓包实例

    打开wireshark 3.0.4,主界面如下:

    选择菜单栏上捕获——>选项,,取消混杂模式,勾选WLAN,开始(你也可以直接双击上图的WLAN开始)

    此时wireshark已经开始工作,查看抓包

    打开cmd窗口,执行ping http://xxx.cn

    工作中的wireshark将抓取到相关数据包,在过滤栏设置过滤条件以避免其他无用数据包影响分析,比如:ip.addr == 185.199.111.153 and icmp表示只显示ICPM协议且源主机IP或者目的主机IP为185.199.111.153的数据包。说明:协议名称icmp要小写

    0x05.Wireshark抓包界面介绍

    0x06.数据包详细信息

    各行信息分别为 Frame: 物理层的数据帧概况 Ethernet II: 数据链路层以太网帧头部信息 Internet Protocol Version 4: 互联网层IP包头部信息 Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP * Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

    0x07.TCP包的具体内容

    从下图可以看到wireshark捕获到的TCP包中的每个字段。

    0x08.wireshark过滤器表达式的规则

    1、抓包过滤器语法和实例

    抓包过滤器类型Type(host、net、port)、方向Dir(src、dst)、协议Proto(ether、ip、tcp、udp、http、icmp、ftp等)、逻辑运算符(&& 与、|| 或、!非)

    协议过滤

    比较简单,直接在抓包过滤框中直接输入协议名即可。tcp,只显示TCP协议的数据包列表 http,只查看HTTP协议的数据包列表 icmp,只显示ICMP协议的数据包列表

    IP过滤

    host 192.168.1.104 src host 192.168.1.104 dst host 192.168.1.104

    端口过滤

    port 80 src port 80 dst port 80

    逻辑运算符&& 与、|| 或、!非

    src host 192.168.1.104 && dst port 80 抓取主机地址为192.168.1.80、目的端口为80的数据包 host 192.168.1.104 || host 192.168.1.102 抓取主机为192.168.1.104或者192.168.1.102的数据包 !broadcast 不抓取广播数据包

    显示过滤器语法和实例
    比较操作符

    比较操作符有== 等于、!= 不等于、> 大于、< 小于、>= 大于等于、<=小于等于。

    协议过滤

    比较简单,直接在Filter框中直接输入协议名即可。注意:协议名称需要输入小写。tcp,只显示TCP协议的数据包列表 http,只查看HTTP协议的数据包列表 icmp,只显示ICMP协议的数据包列表

    ip过滤

    ip.src ==192.168.1.104 显示源地址为192.168.1.104的数据包列表 ip.dst==192.168.1.104, 显示目标地址为192.168.1.104的数据包列表 

    ip.addr == 192.168.1.104 显示源IP地址或目标IP地址为192.168.1.104的数据包列表

    端口过滤

    tcp.port ==80, 显示源主机或者目的主机端口为80的数据包列表。 

    tcp.srcport == 80, 只显示TCP协议的源主机端口为80的数据包列表。

    tcp.dstport == 80,只显示TCP协议的目的主机端口为80的数据包列表。

    Http模式过滤

    http.request.method=="GET", 只显示HTTP GET方法的。

    逻辑运算符为 and/or/not

    过滤多个条件组合时,使用and/or。比如获取IP地址为192.168.1.104的ICMP数据包表达式为ip.addr == 192.168.1.104 and icmp

    按照数据包内容过滤。

    假设我要以IMCP层中的内容进行过滤,可以单击选中界面中的码流,在下方进行选中数据。右键-->准备过滤器-->选中-->添加条件表达式,如data contains "uestc"

    0x09.Wireshark分析TCP协议三次握手

    TCP三次握手连接建立过程

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手,客户端与服务器开始传送数据。{% endtabs %}

    wireshark抓取访问指定服务器数据包

    启动wireshark抓包,打开浏览器输入www.cnblogs.com

    终止抓包,输入http过滤

    隐藏其他无关http数据包,右键选中,追踪流——>TCP流,显示握手信息,如图所示:

    可以看到这里截获了三个握手数据包,第四个是HTTP数据包,说明HTTP的确是使用TCP建立连接的。

    第一次,客户端发送了一个TCP,标志位为SYN,序列号为0,表示客户端请求建立连接,如下:

    关键参数
    • SYN :标志位,表示请求建立连接

    • Seq = 0 :初始建立连接值为0,数据包的相对序列号从0开始,表示当前还没有发送数据

    • Ack = 0:初始建立连接值为0,已经收到包的数量,表示当前没有接收到数据

    第二次,服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即0+1=1, 如下图如下:

    关键参数

    SYN + ACK: 标志位,同意建立连接,并回送SYN+ACK

    Seq = 0 :初始建立值为0,表示当前还没有发送数据

    Ack = 1:表示当前端成功接收的数据位数,虽然客户端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位。(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)

    第三次,客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1,如下图如下:

    关键参数

    ACK :标志位,表示已经收到记录Seq = 1 :表示当前已经发送1个数据Ack = 1 : 表示当前端成功接收的数据位数,虽然服务端没有发送任何有效数据,确认号还是被加1,因为包含SYN或FIN标志位(并不会对有效数据的计数产生影响,因为含有SYN或FIN标志位的包并不携带有效数据)。

    0x0a.其他

    调整时间戳

    View -->Time Display Format --> Date and Time of Day
    

    参考

    https://www.cnblogs.com/linyfeng/p/9496126.html

    https://www.zhoulujun.cn/html/theory/network/201611307908.html

    关于本文作者:@Ju5tice原文:https://zhuanlan.zhihu.com/p/82498482

    原创系列推荐

    1. JavaScript 重温系列(22篇全)

    2. ECMAScript 重温系列(10篇全)

    3. JavaScript设计模式 重温系列(9篇全)

    4. 正则 / 框架 / 算法等 重温系列(16篇全)

    5. Webpack4 入门(上)|| Webpack4 入门(下)

    6. MobX 入门(上) ||  MobX 入门(下)

    7. 59篇原创系列汇总

    回复“加群”与大佬们一起交流学习~

    点这,与大家一起分享本文吧~

    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    《大话数据结构》第1章 数据结构绪论 1.2 你数据结构怎么学的?
    伍迷七八月新浪微博集锦
    《大话数据结构》第9章 排序 9.7 堆排序(下)
    《大话数据结构》第3章 线性表 3.8.2 单链表的删除
    《大话数据结构》第9章 排序 9.5 直接插入排序
    《大话数据结构》第9章 排序 9.8 归并排序(上)
    《大话数据结构》第2章 算法基础 2.9 算法的时间复杂度
    《大话数据结构》第1章 数据结构绪论 1.1 开场白
    《大话数据结构》第9章 排序 9.1 开场白
    [AWS] Assign a public IP address to an EC2 instance after launched
  • 原文地址:https://www.cnblogs.com/pingan8787/p/13069412.html
Copyright © 2011-2022 走看看