关于网络抓包,也是一个日常开发中不怎么会用到的知识点,但是作为一位程序员,应该需要具备一定的操作能力。特别是在跟硬件设备对接数据的时候。
为什么要抓包
服务端:netty-socket搭建的服务端
客户端:硬件设备通过tcp协议上传数据
问题:
1.硬件设备一无法重连服务端,数据无法上传。硬件提供方怀疑服务端功能有问题,导致硬件端无法连接。提出抓包查看是否进行tcp的握手,形成稳定的连接。
2.硬件设备二注册服务端失败。提供接收到的数据给硬件提供方,硬件提供方怀疑服务端未成功解析数据,解析数据出现断包情况。提出抓包核对数据是否完整。
准备抓包
对于别人提出的问题,当然要准备好数据反馈回去咯!!!
但是问题来了,抓包?不会!查呗!
选择抓包工具
网上比较火的抓包工具,Charles、Fiddler、WireShark,三个都下载一遍。但是在抓的过程中,发Charles跟Fiddler都无法抓去socket数据,而且还是英文版。最后选择了WireShark,三个中他可以直接抓取到我想要的数据,而且有中文版。
下载WireShark
官网下载地址(2022-11-20 最新地址):www.wireshark.org/#download
选择适合自己系统的版本进行下载,下载完成后直接进行安装即可。
界面语言选择
安装好之后如果是英文版的操作界面,通过配置可以调整为中文版本。
找到Preferences
打开后找到Appearance,配置界面最下面有一个Language,选择Chinese。
抓取数据
选择网卡
由于很多电脑现在都有多网卡,所以当wireShark打开时会提示选择不同的网络。
建议选择能够看到上图曲线的网口,我理解为代表有网络请求可以被监听到
mac下的报错
这是一个没有权限的报错:
The capture session could not be initiated on interface 'en0' (You don't have permission to capture on that device).
解决方案:
授权文件夹:/dev/bpf*
sudo chmod o+r /dev/bpf*
查看数据
到这里就可以查看到抓取的数据了
简易过滤数据
wireShark提供丰富的过滤方式,但是我现在就用到了一个:通过端口进行过滤。
tcp.port == 80
基础语法:
**ip地址:**ip.addr ip.src ip.dst
**端口过滤:**tcp.port tcp.srcport tcp.dstport
**协议过滤:**ip tcp udp http
**逻辑操作符:**and or not
比较操作符:== != > >= < <=
WireShark还有很多用法,会在以后的使用中增加更多的内容。