文章目录

  • Pre
  • 接口列表
    • 开启捕获功能
    • 观察 TCP 协议
    • 消息视图
    • 观察 HTTP 协议
    • 过滤和筛选
    • 报文颜色
  • 总结
  • QA: 请你用自己最熟悉的语言,写一个 UDP 连接程序,然后用 Wireshark 抓包。


Pre

Wireshark 是世界上应用最广泛的网络协议分析器,它让我们在微观层面上看到整个网络正在发生的事情。

Wireshark 本身是一个开源项目,所以也得到了很多志愿者的支持。同时,Wireshark 具有丰富的功能集,包括:

  • 深入检查数百个协议,并不断添加更多协议;

  • 实时捕获和离线分析;

  • 支持 Windows、Linux、macOS、Solaris、FreeBSD、NetBSD,以及许多其他平台;

  • 提供 GUI 浏览,也可以通过 TTY;

  • 支持 VOIP;

  • 支持 Gzip;

  • 支持 IPSec。

……

Wireshark 的主页:https://www.wireshark.org/download.html下载 Wireshark

那如何通过wireshark进行 TCP 抓包和调试?


接口列表

Whireshark 可以帮你看到整个网络交通情况,也可以帮你深入了解每个封包。而且 Whireshark 在 macOS、Linux、Windows 上的操作都是一致的,打开 Wireshark 会先看到如下图所示的一个选择网络接口的界面。

我们要做的第一件事情就是选择一个网络接口(Network Interface)。Linux 下可以使用ifconfig指令看到所有的网络接口,Windows 下则使用 ipconfig。可以看到,上图中有很多网络接口,目前我连接路由器的接口是以太网 2。


开启捕获功能

选择好接口之后,点击左上角的按钮就可以开启捕获,开启后看到的是一个个数据条目。

因为整个网络的数据非常多,大量的应用都在使用网络,你会看到非常多数据条目,每个条目是一次数据的发送或者接收。如下图所示:

以下是具体捕获到的内容:

  • 序号(No.)是 Wireshark 分配的一个从捕获开始的编号。

  • 时间(Time)是从捕获开始过去的时间戳,具体可以在视图中设置,比如可以设置成中文的年月日等。这里有很多配置需要你自己摸索一下,我就不详细介绍了。

  • 源地址和目标地址(Source 和 Destination)是 IP 协议,注意这里有 IPv6 的地址,也有 IPV4 的地址。

  • 协议可能有很多种,比如 TCP/UDP/ICMP 等,ICMP 是 IP 协议之上搭建的一个消息控制协议(Internet Control Message Protocol),比如 Ping 用的就是 ICMP;还有 ARP 协议(Address Resolution Protocol)用来在局域网广播自己的 MAC 地址。

  • Length 是消息的长度(Bytes)。

  • Info 是根据不同协议显示的数据,比如你可以看到在TCP 协议上看到Seq 和 ACK。这里的 Seq 和 ACK 已经简化过了,正常情况下是一个大随机数,Whireshark 帮你共同减去了一个初始值。


观察 TCP 协议

如果你具体选择一个 TCP 协议的捕获,可以看到如下图所示的内容:

然后在这下面可以观察到详情内容:

我们可以从不同的层面来看这次捕获。从传输层看是 TCP 段;从网络层来看是 IP 封包;从链路层来看是 Frame。

点开不同层面观察这个 TCP 段,就可以获得对它更具体的认识,例如下图是从 TCP 层面理解这次捕获:

你可以看到这次捕获是一次 ACK(见 Flags)字段,从端口 58260 发往 443,那么大概率是 HTTPS 客户端给服务器的响应。


消息视图

如果你选中一条消息,下面会出现一个消息视图。还有一个二进制视图。二进制视图里面是数据的二进制形式,消息视图是对二进制形式的解读。

Whireshark 追溯的是最底层网卡传输的 Frame(帧),可以追溯到数据链路层。因此对二进制形式的解读,也就是我们的消息视图也要分层。因为对于同样的数据,不同层的解读是不同的。

  • 最上面是 Frame 数据,主要是关注数据的收发时间和大小。

  • 接着是数据链路层数据,关注的是设备间的传递。你可以在这里看到源 MAC 地址和目标 MAC 地址。

  • 然后是网络层数据,IP 层数据。这里有 IP 地址(源 IP 地址和目标 IP 地址);也有头部的 Checksum(用来纠错的)

  • 最下面是传输层数据。 也就是 TCP 协议。关注的是源端口,目标端口,Seq、ACK 等。

  • 有的传输层上还有一个 TLS 协议,这是因为用 HTTPS 请求了数据。TLS 也是传输层。TLS 是建立在 TCP 之上,复用了 TCP 的逻辑。


观察 HTTP 协议

Wireshark 还可以用来观察其他的协议,比如说 HTTP 协议,下图是对 HTTP 协议的一次捕获:

可以看到,Wireshark 不仅仅捕获了应用层,还可以看到这次 HTTP 捕获对应的传输层、网络层和链路层数据。


过滤和筛选

Wireshark 还提供了捕获的过滤,我们只需要输入过滤条件,就可以只看符合条件的捕获。

比如我们想分析一次到百度的握手。首先开启捕获,然后在浏览器输入百度的网址,最后通过ping指令看下百度的 IP 地址,如下图所示:


看到IP 地址之后,我们在 Wireshark 中输入表达式,如下图所示:

这样看到的就是和百度关联的所有连接。上图中刚好是一次从建立 TCP 连接(3 次握手),到 HTTPS 协议传输握手的完整过程。你可以只看从192.168.1.5到14.215.177.39的请求。

首先是从客户端(192.168.1.5)发出的 SYN 和百度返回的 SYN-ACK,如下图所示:


然后是客户端返回给百度一个 ACK:

接下来是 HTTPS 协议开始工作(开始握手):

可以看到 HTTPS 协议通过 TLSv1.2 发送了 Client Hello 到服务端。接下来是 Server 返回给客户端 ACK,然后再发送给客户端一个 Server Hello:

之后百度回传了证书:

最后开始交换密钥,直到 HTTPS 握手结束:


报文颜色

在抓包过程中,黑色报文代表各类报文错误;红色代表出现异常;其他颜色代表正常传输。


总结

Wireshark 是个强大的工具,支持大量的协议。还有很多关于 Wireshark 的能力,希望你可以进一步探索,如下图中鼠标右键一次捕获,可以看到很多选项,都是可以深挖的。


QA: 请你用自己最熟悉的语言,写一个 UDP 连接程序,然后用 Wireshark 抓包。

以 Java 为例,写了一个回声服务(即客户端发送什么服务段返回什么),以下是服务端程序:

var socket = new DatagramSocket(8888);var buf = new byte[256];while (true) {DatagramPacket packet= new DatagramPacket(buf, buf.length);System.out.println("try receive...");socket.receive(packet);var address = packet.getAddress();int port = packet.getPort();packet = new DatagramPacket(buf, buf.length, address, port);String received= new String(packet.getData(), 0, packet.getLength());socket.send(packet);}

以下是客户端程序:

  var buf = "Hello".getBytes();var socket = new DatagramSocket();var address = InetAddress.getByName("localhost");var packet= new DatagramPacket(buf, buf.length, address, 8888);socket.send(packet);socket.receive(packet);String received = new String(packet.getData(), 0, packet.getLength());System.out.format("Server echo : %s\n", received);

通过观察上面两段程序,你会发现发送和接收的都是Datagram报文。而且服务端和客户端之间不需要建立连接。服务端可以通过读取客户端的地址区分客户端,客户端通过服务端地址和端口发送数据到服务端。

计网 - TCP 实战:如何进行 TCP 抓包调试?相关推荐

  1. 物联网设备获取北京时间、年月日、星期几,GMT格林威治标准时间转换为北京时间,授时api Fiddler抓包调试

    1. 获取北京时间.年月日 授时api 苏宁获取北京时间的api不要太方便:http://quan.suning.com/getSysTime.do 使用 Fiddler抓包调试,查看HTTP返回报文 ...

  2. 【米家】Charles 抓包调试

    抓包调试 扩展程序SDK 中的接口均通过网络与小米IoT 平台交互,为了方便开发者在开发扩展程序的过程中,快速定位并排查问题,开发者在开发以及调试的过程中,使用抓包工具Charles,分析问题出现的原 ...

  3. python实战:利用chrome抓包插件HTTP间谍分析有道翻译反爬机制

    本次实战目标站点:http://fanyi.youdao.com/?keyfrom=fanyi-new.logo ,主要利用HTTP间谍抓包插件分析有道翻译反爬机制,该抓包能帮我们过滤掉一些不需要的常 ...

  4. 爬取网易云音乐排行--2(抓包、forma、反爬)

    爬取网易云音乐排行 首先,我对我的这篇文章的更新迟到做出抱歉,本来挺懒的,一直都忘了更新,感谢私信回复我的朋友们,有你们的回复,是我前进路上最大的动力,我将对我的文章进行全新的总结和汇总,希望你可以不 ...

  5. 【爬虫实战】12306购票抓包分析以及任务分解

    12306购票抓包分析以及任务分解 前言 1. 抓包分析 1.1 `https://www.12306.cn/index/` 1.2 `https://kyfw.12306.cn/otn/login/ ...

  6. 黄聪:移动应用抓包调试利器Charles

    一.Charles是什么? Charles是在 Mac或Windows下常用的http协议网络包截取工具,是一款屌的不行的抓包工具,在平常的测试与调式过程中,掌握此工具就基本可以不用其他抓包工具了. ...

  7. wireshark 抓包调试 RTSP

    文章目录 下载安装wireshark 测试 分析数据 20220302 最简单的是直接过滤rstp 下载安装wireshark https://pc.qq.com/detail/9/detail_69 ...

  8. charles代理手机调试_Mac 上使用 Charles 进行手机抓包调试

    RN 开发时虽然可以借助 remote-devtools 等工具在 chrome 中调试,但是在有些场景下,比如微信登录,不能用 chrome 调试,这个时候就需要抓包工具的帮助了,在 Mac 上首选 ...

  9. 物联网ZigBee3.0协议E18-2G4U04B模块无线数据抓包调试的方法

    ZigBee3.0无线抓包简介 ZigBee3.0是ZigBee联盟推出的可以互联互通的标准协议,用之前的Packet Sniffer抓包工具是无法解析ZigBee3.0的数据包,因ZigBee3.0 ...

最新文章

  1. mongodb导入bson文件_Python爬虫进阶教程(七):MongoDB数据库
  2. Microsoft Visual SourceSafe 使用指南
  3. ubuntu下不同版本python安装pip及pip的使用
  4. dotnet获取PDF文件的页数
  5. CodeDay#7 启动 | 北京欢迎你
  6. HttpClientFactory 使用说明 及 对 HttpClient 的回顾和对比
  7. java修改配置文件参数_在java类中获取在.properties配置文件中设置的参数
  8. mcrp 对接软件换
  9. 番茄钟怎么调_不一样的番茄计时 APP,让番茄钟回归效率的本质
  10. wildfly jboss deploy 报 拒绝访问
  11. 【滤波器】基于matlab GUI IIR+FIR数字滤波器设计【含Matlab源码 698期】
  12. HTML5(FileRdeader)
  13. 训练集和测试集的区别
  14. polkit启动失败_Linux MySQL 常见无法启动或启动异常的解决方案(上)
  15. wget php mirror 地址,wget命令镜像网站
  16. 再谈windows下创建特殊文件夹
  17. 云计算时代催生下一代网络变革-软件定义的网络之技术架构篇
  18. 使用three.js/webgl开发智慧城市场景的一些总结
  19. Python数据可视化matplotlib:第四回:文字图例尽眉目
  20. Citrix XenDesktop 简介

热门文章

  1. PLSQL的截取函数
  2. java web基本流程
  3. linux 移动目录树到子目录中,Linux系统管理员工具包: 移动Linux/UNIX目录
  4. Job for network.service failed because the control process exited with error code问题
  5. vector的元素不仅仅可以使int,double,string,还可以是结构体
  6. python提取字符串中的 中文 日文 韩文
  7. c++ 使用对象指针
  8. 深度2万字好文:图像处理-基于 PyTorch 的 YOLO v5 表情识别(附源代码)
  9. 听说你想去大厂看学妹,带你看看作业帮产品经理岗面经
  10. Python 知识点全解析系列之列表推导式(list comprehension)