软件介绍
Wireshark
是一款非常强大的跨平台抓包工具 支持Mac
和Windows
平台
软件下载
软件配置
这里以Mac
平台结合谷歌浏览器为例进行配置
进入谷歌浏览器设置页 选择启动时打开新的标签页
创建
keylog.txt
用于存储ssl
密钥 方便https
抓包1
2cd /Users/xxx
touch keylog.txt注意:
keylog.txt
的存放位置由你自己决定 这里我存放到Users
目录下执行以下指令启动谷歌浏览器
1
sudo /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-key-log-file=/Users/xxx/keylog.txt
--ssl-key-log-file
: 表示将ssl
密钥输出到指定文件中注意:
由于我将
keylog.txt
文件放在了用户目录下 所以指令执行必须加sudo
表示以管理者的身份运行如果你的谷歌浏览器并未安装在
Applications
目录下 可以利用以下指令来获取Chrome应用的路径1
sudo find / -iname "Google Chrome"
在新打开的浏览器中输入你需要进行
https
抓包的网址 并回车这里我以百度官网
https://baidu.com
为例此时我们会发现
keylog.txt
文件中已经有了相应的日志信息启动
Wireshark
选择需要监控的网卡并配置TLS 关联
keylog
文件
至此 软件配置完毕 接下来开始抓包测试
抓包测试
打开百度网页 然后按
F12
进入Chrome
开发者工具 获取百度的实际ip
地址 用于过滤使用在
Wireshark
过滤栏中输入ip.dst==36.155.132.76 and http
对该ip
进行过滤
软件详细使用
利用好过滤
Wireshark
的快速上手的技巧那就是使用过滤
想要在大量的数据中获取到自己想要的数据 那就必须利用好过滤关键字
我们进行网络抓包时大部分都是抓取http/https
请求 因此我们只需在过滤栏中输入http
关键字:
当我们在过滤栏进行输入时Wireshark
会有自动补全提示 当过滤栏背景为绿色表示软件能识别并根据该关键字进行数据过滤 如果背景色为红色 那表明无法根据该关键字进行过滤:
过滤json数据
通常我们可能会抓取一下应用的api
返回的数据基本都是json
格式 此时我们可以在过滤栏输入http and json
关键字
过滤图片
如果要过滤图片 可以使用http.content_type
比如:
1 | http.content_type =="image/png" |
不过为了更好地过滤出数据 我推荐大家使用contains
的形式而不是==
这样容错率能大幅提升
1 | http.content_type contains "image" |
过滤音视频
如果是amr
格式的音频可以在过滤栏输入http and amr
关键字
如果是MP4
格式视频可以在过滤栏输入http and mp4
关键字
如果是直播流 可以尝试输入rtp
关键字
当然我们还可以通过模糊过滤的方式 比如:
1 | http.content_type contains "video" |
和
1 | http.content_type contains "audio" |
根据ip地址过滤
这里需要注意的是 一个完整的数据交互是包括请求和响应两部分的
如果我们需要抓请求的部分 那么使用dst
关键字:
1 | ip.dst==服务器ip地址 |
如果我们需要抓响应的的部分 那么使用src
关键字 也就是来源于对方 向我们发送数据:
1 | ip.src==服务器ip地址 |
如果请求和响应两个部分都想抓取 那就用addr
关键字:
1 | ip.addr==服务器ip地址 |
也就是说无论是Suorce
还是Destination
只要包含该ip
的都会过滤出来
根据请求方法过滤
如果我们要指定过滤GET
或者POST
方法 那么可以使用以下关键字:
1 | http.request.method==GET |
根据请求路径进行过滤
有时候同一个应用会使用不同的ip
地址 尤其是某些直播应用 虽然每个视频ip可能会不同 但是地址路径是一样的 比如以live/xxx.flv
结尾 那么我们就可以根据这个进行匹配过滤 如下:
1 | http.request.uri contains "live" |
根据排除法进行过滤
如果我们要排除某个ip的数据, 我们可以在关键字前面加上not
或者!
如下:
1 | !(ip.addr == 192.168.0.1) |
根据内容长度进行过滤
如果我们要根据请求的内容进行过滤可以使用http.content_length
关键字 如下:
1 | http.content_length <=30 |
根据正则进行匹配过滤
如果我们要使用正则匹配 可以使用matches
关键字 如下:
1 | http.request.uri matches "user" |
注意: matches
匹配不区分大小写
根据域名进行过滤
如果需要根据域名进行过滤 可以使用http.host
关键字 如下:
1 | http.host==baidu.com |
或者
1 | http.host contains "baidu" |
如果要按照源地址和目标地址过滤 可以使用src www.baidu.com
和dst www.baidu.com
根据cookie进行过滤
使用http.cookie
关键字 如下:
1 | http.cookie contains "userid" |
根据端口号过滤
使用http.port
关键字 如下:
1 | http.port==80 |
根据http响应状态码过滤
可以使用http.response.code关键字 如下:
1 | http.response.code==200 |
结合使用
以上所有的关键字 都可以使用与或非运算符进行结合使用 比如我想过滤一个http
请求且请求响应为403
的数据 过滤方式如下:
1 | http and (http.response.code==403) |
关于清除界面数据
当我们感觉数据过多 需要清理界面数据时 需要停止抓包 然后再点击开始抓包 这个时候软件会给予提示 是否需要将数据包进行保存到本地 我们只需要点不保存即可:
或者直接点击重新抓包一步到位:
Wireshark
的优势
能抓取物理层到应用层七大层数据 这是其他诸如
Charles、Fiddler
抓包软件所不具备的监控网卡 所有数据无所遁形
有些
App
禁止代理状态下使用 或者内部走的非代理流量 那么这种问题Wireshark
可以轻松解决
总之 Wireshark
和其它抓包软件结合使用 基本上能解决我们的抓包需求
本文为作者原创 转载时请注明出处 谢谢