更多内容关注微信公众号:fullstack888

一、概述

无论是开发还是测试,在工作中经常会遇到需要抓包的时候。本篇主要介绍如何在各个平台下高效抓包。目前的抓包软件总体可以分为两类,一种是设置代理抓取http包,比如Charles、mitmproxy这些软件。另一种是直接抓取经过网卡的所有协议包,其中最出名就是大名鼎鼎的wireshark以及linux自带的抓包软件tcpdump。下面重点介绍一下这四个抓包工具的特点以及使用

二、Wireshark

wireshark想必大多数程序员都不会陌生。wireshark在各个平台都可以安装使用,它可以抓取经过指定网卡的所有协议。wireshark虽然很强大,但是对初学者其实不是很友好。这也正是由于它太强大,它可以抓取所有包,所以初学者在使用时面对茫茫数据流不知所措。初学者需要认真的去学习怎么过滤得到自己感兴趣的包,但是如果不熟悉wireshark的过滤语法,要过滤数据包将举步维艰。

过滤语法简单介绍

wireshark的过滤语法总结起来其实也很简单,就是以协议开头,后面可以跟着协议的属性,然后加上一些判断符号,比如contains、==、>、<等等。比如只想展示http的协议内容,则直接在过滤器输入框中输入http即可。如下图:

比如我只想看http协议的请求头中uri包含’/api’的协议,就可以这么写:

如果想通过目标ip或者来源ip来过滤包,就不可以以http协议为前缀了,因为这些是ip协议的相关属性。通过目标ip来过滤可以这么写:

上面表示目标机器的ip是61.135.217.100并且协议是http的包。

wireshark支持很多种协议,我们可以通过右上角的expression来打开搜索支持的协议,还可以找出协议支持的属性,然后填入期待的值,软件会自动为我们构建过滤语句。

优缺点

优点:

  • 功能强大,可以抓取所有协议的包

  • 抓到的包容易分析

缺点:

  • 由于线上服务器没有GUI,只有命令行,因此无法在线上服务器使用

  • 无法分析https数据包,由于wireshark是在链路层获取的数据包信息,所以获取到的https包是加密后的数据,因此无法分析包内容。当然,我们可以对https数据包进行解密, 但是操作具有一定的复杂度,可能要消耗很多时间。

三、Tcpdump

tcpdump是linux上自带的一个抓包软件(mac也有),功能强大,也可以抓取经过指定网卡的所有协议包。由于是命令行工具,tcpdump抓取到的包不易于分析,一个常见的做法是将tcpdump抓到的包输出到某个文件,然后将文件拷贝下来用wireshark分析。

tcpdump的简单使用介绍

下面的语句参考文章:

https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html

一些简单的过滤参数:

# -i 参数表示抓取指定网卡的内容。具体网卡可以通过 ifconfig 命令查看
# 如果不指定网卡,默认tcpdump只会监视第一个网络接口
tcpdump -i eth1
# 打印所有www.baidu.com相关的包,这个host后面可以填 域名,也可以填ip
tcpdump host www.baidu.com
tcpdump host 192.168.0.1
# 打印 nn1和nn2或nn3 主机间通信的包,这里可以替换成ip
tcpdump host nn1 and \( nn2 or nn3 \)
# 打印nn1和非nn2之间的ip数据包
tcpdump ip host nn1 and not nn2
# 发送者是nn1的数据包
tcpdump -i eth0 src host nn1
# 接受者是nn1的数据包
tcpdump -i eth0 dst host nn1
# 指定tcp端口是23以及host是210.27.48.1数据包
tcpdump tcp port 23 and host 210.27.48.1

抓包内容输出到文件:

# 抓取指定网卡的包输出到test.cap

# 抓取指定网卡的包输出到test.cap
tcpdump -i en0 -w test.cap

之后我们可以把test.cap直接用wireshark打开,就可以很直观的分析包了。

用tcpdump输出cap文件包:

tcpdump -r test.cap

优缺点

优点:

  • 功能强大,可以抓所有协议的包

  • linux自带,直接在所有的服务器上面抓包,这是其他抓包软件不具备的

缺点:

  • 数据包分析困难,需要配合wireshark使用

  • 和wireshark一样,无法分析https数据包

四、Charles

Charles是一款http抓包工具,它是通过代理来实现的抓包。也就是我们在访问网页时需要配置代理,将代理指向Charles监听的端口,之后我们的http请求都会发向Charles的端口,之后Charles会帮我们转发并记录协议内容。

Charles的使用非常简单,配置好代理后,Charles就开始抓包了。我们可以直接通过Charles的GUi查看包的内容:

上图中的unknown表示https加密后的数据,所以看不到协议的具体内容。我们可以通过安装Charles的证书,让Charles也可以查看https协议的具体内容。

优缺点

优点:

  • 使用简单,只需配置一下代理地址就可以

  • 要抓取https协议的配置也很简单,只要安装下charles的证书就可以了

缺点:

  • 只支持抓取http协议

五、mitmproxy

mitmproxy是python写的一款http抓包工具,虽然只支持http抓包,但是它的特性非常强大,它不仅可以抓包,还可以对请求进行拦截、重现等操作。和Charles一样,它的原理也是基于代理,使用的时候需要设置代理指向它。

mitmproxy是命令行工具,但是也自带了mitmweb工具,可以让用户在网页上操作。另外,mitmproxy还支持用户自行编写插件,可以编写脚本对请求进行处理,然后把修改后的请求发出去。

安装

首先需要在机器安装python3以及pip3.之后通过pip3安装

pip3 install mitmproxy

如果安装mitmproxy过程中报错ModuleNotFoundError: No module named '_ssl',就需要安装一下OpenSSL,然后再重新编译安装一下python3

yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel gcc gcc-c++
# 去Python3的安装目录再次安装编译一次python3
make && make install

安装好openSSL后再执行pip3 install mitmproxy

使用

安装后,直接在命令行输入mitmproxy就会进入它的交互界面:

这时候mitmproxy已经开始监听8080端口(默认),接着,我们可以去浏览器设置代理。浏览器设置代理的方式有很多,这里不多做介绍。

设置完代理后,访问浏览器的请求都会被发到mitmproxy上,mitmproxy根据规则对请求进行拦截(不配置拦截规则的话则都不拦截),所有经过的请求都会被输出:

在交互界面上可以通过快捷键操作请求。输入问号’?’,可以查看快捷键的文档。

下面介绍一些常用的快捷键和功能

1. 请求过滤

在请求列表交互界面,按下f键后,可以输入一些过滤规则:

具体的过滤语法可以按下’?‘键后,再按下方向键右’—>'或者l键。

2. 请求拦截

按下i键后,可以对指定的请求进行拦截。按mitmproxy收到指定条件的请求时,不会立马把它转发出去,而是等待我们执行resume操作后,才会把请求转发出去——在这期间我们甚至可以对请求进行手动修改。

红色字体表示该请求被拦截

之后我们可以按入a键来恢复该请求,可以输入A键恢复所有被拦截的请求。

3. 查看/编辑请求

把指示光标移动到某个请求上,按回车可以查看请求的内容。或者鼠标直接点击请求也可以。

之后通过左右方向键可以查看request、response、detail等信息。

如果要编辑请求,可以在这个界面输入e,然后会让我们选择编辑哪块内容:

之后就会进入vim编辑界面编辑相应的内容了(保存后会生效)。

4. 重发请求

mitmproxy的光标指向某个请求时,按下r键可以重发这个请求(重发前可以对该请求进行编辑)。

按下’:'键后,可以输入命令,这样我们就可以通过过滤规则批量的重发请求

replay.client是mitmproxy内置的一个命令,我们也可以自行编写命令。命令的编写可以参考官网文档,这里不做介绍。

5. 插件开发

我们可以编写插件,然后在启动的时候指定插件,mitmproxy处理请求的时候会执行一个插件的链,这样我们就可以对请求进行编辑然后再发送出去了。

借用官网的插件demo:

from mitmproxy import ctxclass Counter:def __init__(self):self.num = 0def request(self, flow):self.num = self.num + 1ctx.log.info("We've seen %d flows" % self.num)addons = [Counter()
]

这个方法对每一个请求进行处理,然后打印序号。通过mitmproxy -s test.py来让插件生效。通过插件可以绑定各种连接事件。感兴趣的朋友可以自行去mitmproxy官网看文档,这里不多做介绍。

6. 保存抓到的请求数据

通过w快捷键我们可以把这次抓到的请求包保存到文件上。

通过mitmproxy -r file可以读取以前抓取的请求信息进行分析。

优缺点

优点:

  • 命令行操作,可以在无GUI界面的服务器上使用

  • 安装好mitmproxy提供的证书后,也可以分析https请求

  • 不仅可以抓包,还支持对包的拦截、修改、重复,这是常规抓包软件不具备的

缺点:

  • 仅支持http协议的抓包

附录

mitmproxy官方文档地址:

https://docs.mitmproxy.org/stable/

六、总结

对于这几个抓包神器,我总结了下使用场景:

  • 只抓http协议的话,推荐使用mitmproxy。mitmproxy丰富的功能不仅可以满足我们的抓包需求,还可以提升我们的工作效率。比如测试可以抓包后一键重发请求来重现bug,开发调试的时候可以修改请求内容等等。

  • 如果是在线上的没有GUI的服务器,推荐使用tcpdump,虽然mitmproxy也可以支持命令行抓包,但是生产环境的服务器最好不要乱安装第三方插件。另外,大多数服务器都有装tcpdump。我们可以通过把请求的内容输出到文件,然后拷贝到自己的电脑用wireshark分析。

  • 想要抓取http以外的协议的话,直接上wireshark。功能强大

  • 对于Charles,感觉用了mitmproxy之后,就基本用不上Charles了。Charles好像也可以编辑后再发送,但是感觉不是很好用,可能我用的不是很熟吧。

- END -

往期回顾

◆MySQL 与 Redis 缓存的同步方案,建议收藏!

◆微服务架构科普及设计模式

◆微服务之间的最佳调用方式

◆多账号统一登陆,账号模块的系统设计

◆美团技术 Leader,送给程序员的10条精进建议

◆基于 Prometheus、InfluxDB 与 Grafana 打造监控平台

◆Linux 操作系统 — I/O系统原理

◆爬虫或恶意攻击,如何动态屏蔽IP地址?

◆纯干货:系统架构性能问题诊断及优化思路

详情架构群的同学,加微信: jiagou6688 ,备注:Java

墙裂推荐 - 四大抓包神器,非常好用相关推荐

  1. 抓包那些事——四大抓包神器简介

    文章目录 一.概述 二.Wireshark 过滤语法简单介绍 优缺点 三.Tcpdump tcpdump的简单使用介绍 优缺点 四.Charles 优缺点 五.mitmproxy 安装 使用 1. 请 ...

  2. python 数据分析教程推荐_太香了!墙裂推荐6个Python数据分析神器!!

    作者:东哥起飞,数据爱好者 Python数据科学 hello,大家好我是东哥! 用Python处理数据大家都不陌生了,属常规操作,但常规之下还是也有些暗藏技巧的,本篇东哥分享6个好玩高效的操作,帮助大 ...

  3. 推荐一款万能抓包神器:Fiddler Everywhere

    搞IT技术的同行,相信没有几个人是不会抓包这项技能的(如果很不幸你中枪了,那希望这篇文章给你一些动力),市面上的抓包工具也有很多,常用的有:Charles.Fiddler.Burpsuite.Wire ...

  4. 四大网络抓包神器,总有一款适合你......

    一.概述 无论是开发还是测试,在工作中经常会遇到需要抓包的时候.本篇博客主要介绍如何在各个平台下,高效的抓包.目前的抓包软件总体可以分为两类,一种是设置代理抓取http包,比如Charles.mitm ...

  5. 墙裂推荐7款办公必备软件,免费、小巧、好用

    来啦来啦! 别人1小时.你几分钟(怎么有点不对劲-)就搞定的! 这7款工作效率神器.墙裂推荐! 01.自建企业私有安全网盘 云盒子  作为公司老板: 财务报表放公有云上有泄密风险? 员工离职,没交接全 ...

  6. 卧槽!两大抓包神器的视频教程来啦!

    应读者的要求整理了两大抓包神器:Fiddler和Wireshark的视频教程!也是费了不少劲才整理出来的,要不是看读者是个妹子小白,我才懒的整理.哈哈!说来你们也是沾妹子的光!有需要的抓紧保存吧!无论 ...

  7. 「 墙裂推荐」互联网人必备GIF制作的14种选择

    生活中可能遇到将自己的操作或者视频转换成 GIF 图分享给别人,今天墙裂推荐 14 个 GIF 制作通道,一起 mark 吧! 本文通过制作 GIF 软件.录制 GIF 软件以及在线制作 GIF 网站 ...

  8. 墙裂推荐,Python开发者不容错过的7个VS Code扩展

    Visual Studio Code(简称 VS Code)是一个由微软开发,同时支持 Windows. Linux 和 macOS 等操作系统的免费代码编辑器,它支持测试,并内置了 Git 版本控制 ...

  9. 墙裂推荐 Anaconda | 安利 Python IDE

    一.为什么安装 Anaconda? 如果你苦于给 python 安装各种包,安装过程中还各种出错.那么我墙裂推荐你!Anaconda 可以帮助你管理这些包,包括安装,卸载,更新. Anaconda 附 ...

最新文章

  1. j2ee学习 +“云未来
  2. Netty通信框架Java实现小记
  3. Go的sync.Mutex(七):互斥锁锁定一个资源 只有一个协程操作其他等待
  4. linux下vi的一些简单的操作
  5. C# Web实时消息后台服务器推送技术-GoEasy
  6. 【NGN学习笔记】6 代理(Proxy)和背靠背用户代理(B2BUA)
  7. 企业应该如何选型ERP?
  8. 深度学习目标检测之 YOLO v4
  9. rocketmq删除topic_RocketMq 快速入门教程
  10. php从入门到放弃表情,Lite语言——从入门到放弃(一)
  11. 在Solaris 下使用Os Watcher 监控Oracle
  12. VMware ESXI 5.0群集+ISCSI存储
  13. EDUCoder编程练习题解(递归与嵌套函数)
  14. 下载webpack依赖报错“Refusing to install package with name “webpack“ under a package”
  15. 【免费软件测试视频-0022】——Winrunner系列之---GUI快速脚本向导
  16. 小游戏---java版2048(2048 go go go)
  17. Matrix的左倾和右倾放大和缩小和倒影和双指放大和PhotoView
  18. 用手机打开word图表位置很乱_9个工作中经常用到的Word技巧,能大大提升你的工作效率...
  19. Koo叔说Shader—开篇
  20. js网页进度条等待特效

热门文章

  1. pc端调用电脑摄像头及麦克风完成录像或录音并实现回放和上传服务器
  2. 搭载三款动力 宝马丰田将联手推全新跑车
  3. uniapp中picker及默认组件改国际化
  4. 【汇正财经】金融股有什么投入优势?
  5. C语言写三子棋,冲冲冲!
  6. 其实,我喜欢你很久了。
  7. php连接mysql实现简单注册登陆页面
  8. 基于QT+Halcon实现拟合圆形
  9. AI一周热闻:华为豪掷3.3亿剑桥买地,自建光芯片工厂;比特大陆IPO失败,组织架构调整...
  10. 面向物流行业的文档管理系统