socks server开发记录(1) 字节对齐引起的血案

前两天代码调通了,socks通讯协议都问题了,但连接建立好开始转包时候,无论是客户端还是浏览器都不能正确识别返回的http包。各种gdb跟踪,抓包和代码走读(主要review socks处理逻辑代码)都没发现问题,抓包倒是发现有个异常的ack包,tcp传输层后会带几个00。但是ack包又不是我的程序发的,整体都处于纠结状,尝试各种的方法,都没效。最后实在没办法,自己用python快速写了个socks5的客户端,一个包一个包的来对。没想到正是这个方法找到了问题所在。在用python的struct.unpack来解socks server返回的协议包时,发现一个应该是10字节的包长度竟然是12.打开组包的代码,愕然发现定义socks协议的struct时候忘记加上pack(1)使得一个字节对齐。顿时汗汗汗。。。

由于socks的request返回包前面正好是4个字节,而地址是ip4时候也是4字节,后面2字节储存端口,对齐的两个字节用00补上。刚好不响应客户端程序解包,但是python的struct.unpack()却需要指定的长度,抛出异常,最终暴露了问题。

遇到问题习惯按照自己设想问题可能出现的地方去找,明显是不够,对自己确认不会出现问题的地方,也要去重新确认。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值