me icon indicating copy to clipboard operation
me copied to clipboard

学习 Socks5

Open nonocast opened this issue 2 years ago • 0 comments

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
  • 循环这个转发过程直到一方关闭

参考阅读

nonocast avatar Jun 11 '22 19:06 nonocast