做网络开发或运维的朋友,肯定遇到过这样的场景:一台设备只支持 HTTP 代理,但你手里只有 SOCKS5 代理;或者某个内网服务只开放了 SOCKS 端口,需要通过 HTTP 才能访问。这时候 socks2http 就是救命稻草了,它能把 SOCKS 代理转换成 HTTP 代理,打通不同协议之间的壁垒。
socks2http 说白了就是一个协议转换器,它监听一个本地 HTTP 端口,收到请求后通过 SOCKS 代理转发出去。配置特别简单,下载一个预编译的二进制文件,运行一条命令就能用。比如 socks2http -s socks5://127.0.0.1:1080 -l 127.0.0.1:8080,这样本地 8080 端口就变成了一个 HTTP 代理,背后通过 1080 的 SOCKS5 出去。
我第一次用它是在一个特殊的网络环境里,公司内网只允许通过 SOCKS 代理访问外网,但浏览器只支持 HTTP 代理。那时候找了好几个工具都不太好用,直到发现 socks2http,一条命令就解决了问题。后来我把它集成到了公司的开发环境脚本里,新同事入职配置代理时一条命令搞定,省了不少口舌。
实际使用中有几个参数值得注意。-t 参数可以设置超时时间,默认是 60 秒,如果你的网络环境比较慢,可以适当调大。-b 参数支持认证,如果你需要分享代理给别人用,可以加个用户名密码保护。-v 参数开启详细日志,调试连接问题时特别有用,能看到每个请求的转发情况。
除了基本的协议转换,socks2http 还有一些高级玩法。比如配合 iptables 可以做全局代理,把所有 HTTP 流量都转发到 SOCKS 代理。再比如在渗透测试中,可以通过 socks2http 把目标机器的 SOCKS 端口暴露成 HTTP 代理,方便用 Burp Suite 这类工具进行中间人攻击。这些场景下 socks2http 能大幅提升工作效率。
不过也要注意安全问题。socks2http 本身不加密,如果在公网环境下使用,建议配合 TLS 或者放在 VPN 后面。另外,不要随便把 socks2http 的端口暴露出去,不然可能被别人当成免费代理来用,轻则流量被占满,重则被查水表。