me
me copied to clipboard
学习 Socks5
client
curl -L -x socks5://127.0.0.1:7890 google.com
注: 前提是你的电脑上开了clash,或者其他梯子,你就算接触过socks5了。
然后你可以nc -l 3000
开一个tcp listener, 然后修改curl为curl -L -x socks5://127.0.0.1:3000 google.com
观察: 你可以发现从curl传过来4个字节,0502 0001,这个就是socks5的第一步协商请求。
# curl -L -x socks5://127.0.0.1:3000 google.com
~ nc -l 3000 | xxd -
00000000: 0502 0001
protocol
rfc 1928,一共才9页,算是一个非常简单的协议。简要描述一下curl http的逻辑:
- C>P: client(curl)连接到socks5 proxy进行握手协商,发送05 03 00 01 02, 告知client支持01,02,03这三种method
- C<P: proxy返回05 02告诉client无需认证,直接干
- C>P: 发送05 01 00 01 xx xx xx xx 80, 告诉proxy去CONNECT xx xx xx xx (ip): 80
- P: 和xx xx xx xx:80建立tcp socket连接
- C<P: 连接成功回复05 00 00 01 00 00 00 00 00 00,表示成功
- C>P: GET / HTTP/1.1 ... 这里就开始直接发送HTTP请求
- P: 将从client收到的数据直接write到和服务器的socket
- P: 将服务器返回的数据write给client
- 循环这个转发过程直到一方关闭