抓包工具原理与实践

4,563 阅读4分钟

写在前面

网上讲抓包工具使用的文章很多,但对抓包工具工作原理、使用场景和能解决的问题的分析较少,故写下这篇文章。虽然目前在从事前端开发的工作,但对计算机网络的理解、对网络问题的分析和解决能力我觉得对任何一个程序员来讲都非常必要。本文将更多的从原理上来聊聊抓包工具的使用,并会推荐一款我比较喜欢的抓包工具给大家

抓包工具的使用场景和能解决的问题

抓包工具的使用场景有哪些?

  • 抓取http(s)请求响应数据
  • 抓取基于其他协议的网络数据
  • 分析网络服务的性能、排查问题
  • 通过抓包学习和理解计算机网络的层次和协议

抓包工具解决了什么问题?

  • 查看原始的、未经解析或处理的网络数据,如协议、地址信息(如IP端口)、数据等

实际例子:之前工作中碰到一个场景需要在服务端直接调用打印机,于是准备开发一个基于nodejs的服务。虽然能想到打印机肯定也是基于某种协议提供了一个网络服务,但之前工作还是缺乏对这块的经验,于是想到了通过抓包工具来抓取一下chrome浏览器是如何调用真实打印机的。(这里我使用的工具是wireshark,也是我想推荐给大家使用的一款抓包软件,后续我会讲一些推荐这款工具的理由)当在浏览器中点击打印后通过抓包工具抓取到的数据包我发现是LPR协议,后来经过查阅发现这是一种行式打印机远程协议,至此也算是对打印协议这块内容有了一个初步的认识

抓包原理

一句话简要的阐述一下抓包工具的工作原理:抓包工具会在网络传输的某个层次或节点截获收发的数据

不同抓包工具的工作工作原理类似但实现方式不尽相同,如charles本质是一个应用程序(如浏览器)的http代理、chrome的network则是直接在浏览器应用程序内部实现、而wireshark则会直接在网卡,也就是链路层到物理层去抓取数据

https抓包原理

要了解https(也就是ssl/tls)数据是如何抓取的,首先需要对ssl/tls的工作原理有所了解。

ssl/tls工作原理简述

首先要明确的是ssl/tls工作的网络层次,它工作在应用层和运输层中间,对https来说也就是在http和tcp之间,所以应用数据传递给http时是明文,而经过ssl/tls处理后到tcp这一层被加密成了密文。下面是ssl/tls的握手过程

  1. 客户端发送支持的加密算法列表及客户端随机数;
  2. 服务端返回(CA认证的)证书(包含服务端公钥),选择客户端支持的密码算法,并返回一个服务端随机数;
  3. 客户端验证证书,用服务端公钥加密并发送主密钥(用于双方生成会话后续所需所有对称密钥);
  4. 服务端解密得到主密钥,后续双方分别用主密钥、相同的加密算法及随机数生成后续会话中真正用来加密数据的对称密钥

抓包工具如何抓取明文的https数据

  • charles作为一个客户端的代理,可以拿到服务端的证书(让代理可以取代客户端与服务器直接通信),然后动态生成一个证书给客户端(解决浏览器的证书校验),所以抓取客户端的https数据需要在客户端安装代理的CA证书
  • wireshark则需要获取并导入ssl会话中生成的对称密钥来进行密文数据的解密

推荐wireshark的理由

  • wireshark可以方便的抓取各种应用层或运输层协议(我们在工作中主要关心的层次,如http、tcp);除了抓取数据和协议,也能帮助我们有效的分析网络服务的性能问题
  • 能抓取到最底层协议的网络数据,对学习和理解计算机网络及各层协议有很大帮助,而理解网络协议是分析和解决所有涉及计算机网络问题的基础;推荐大家有机会可以多些对运输层(如tcp)的了解和学习;应用层协议有很多,如http、ftp、dns等,都属于比较上层的协议,且可能会不断发展和变化,但底层始终还是基于tcp和udp,对他们有更多的理解往往更有利于从更底层、更原理性的视角去理解计算机网络的原理
  • 跨平台,过滤器功能强大