使用wireshark抓包分析SOCKS5协议


通信软件课选择了分析SOCKS5协议,想看一下这个协议在网络通信中是如何进行的,遂抓包实践如下。

编写SOCKS5服务器运行代码(参考自Python编写socks5服务器

本文采用参考链接中curl请求的方法经由代理服务器获取目标网站的信息curl -v --socks5 127.0.0.1:9011 http://www.baidu.com
对于python编写的client程序

需要注意的一点是import的socks包是第三方库PySocks,pip安装时使用命令pip install PySocks(参考自No module named 'socks', i have tried everything

使用SOCKS5服务器脚本和curl命令

在本地运行SOCKS5服务器脚本,执行curl命令得到如图结果

放在远端主机上运行SOCKS5服务器脚本,在本地执行curl命令得到如图结果

这时查询listen的主机端口netstat -anp

可能需要将Local Address 设置为0.0.0.0,外来的连接才可以连接,查相关的资料(全零网络IP地址0.0.0.0表示意义详谈Linux的netstat查看端口是否开放见解(0.0.0.0与127.0.0.1的区别))果然如此。
遂将服务器脚本的倒数第二行"127.0.0.1"改为"0.0.0.0",重复之前步骤发现与本地测试的结果差不多,并在该过程中抓取到curl请求远程主机发送百度首页请求的数据包。

分析抓取到的数据包理解SOCKS5协议的工作过程(感谢socks5代理服务器协议的说明让我预先知道SOCKS5协议数据消息传递的机理)


握手

本地发送认证请求,05表示SOCKS5,02表示接受2种认证方法,00表示无需认证的认证方法,01表示GSSAPI

服务端确认无需认证

本地查询DNS信息

第一个01说明TCP,第二个01说明后面是(DNS查询出的)IP地址,3d87b920指目标网站的ip地址61.135.185.32,0050指80端口

SOCKS5服务器成功连接上目标网站后发送成功响应,ac150007指服务器连接目标网站用到的ip地址172.21.0.7,8a10指使用的端口35344,也可以不说明连接的具体细节,直接0500后面接8个字节的0

本机向SOCKS5服务器发送目标网站的http请求

获取到目标网页信息

挥手
拓展阅读:SOCKS 5 协议抓包分析

posted @   园糯  阅读(6214)  评论(1编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示