由于我是个粗人,是个菜鸟,只会讲大白话,只想知道咱老百姓想听的内容。
不知道为什么那些网文作者都说socks代理比http代理复杂,http代理和socks代理我都做了,明显感觉http代理比socks代理要复杂很多,因为http代理要自己解析http协议,这是我的http代理http://blog.csdn.net/laotse/archive/2010/09/24/5903651.aspx
而socks代理除了开头那一点点外,其他就是什么不管就转发转发就行了。
我做的那个http代理可谓很失败,用着用着就cpu100%占用了,应该就是解析http协议头做的不好,出现死循环了或者别的,那么多http头实在不想再分析了,ccproxy我也sniffer了,结果是看到它也出现了许多错误的解析,ccproxy都多少年了,都解析不好,说明解析http协议确实不容易啊。
所以我很怀疑那些网文作者到底做没做过http代理就信口开河说http代理比socks代理简单。
socks代理里面,有socks4 socks4a socks5,也有叫sock4 sock4a sock5的,都是一回事。
socks4 socks4a和socks5的tcp部分极其简单。
这又出现一个怪现象了,网文中除了一个人说道udp比tcp复杂,其他的全都说udp简单,只说tcp部分,把udp都一笔带过了。
而我就明显感到udp比tcp复杂很多。
socks的rfc是rfc1928和rfc1929,别看了,打个比方,某人看到一本书,当他看了目录,准备往后翻看内容时,发现已经到底了,原来这不是“目录”它就是内容,这就是rfc1928,话说rfc是干什么的啊,写成这样就算交活了啊,还有王法吗,还有法律吗。中文翻译的就像是机器翻译一样,不是人类语言。所以造成网文上全都是连蒙加猜,没有一个对的,这两天我连续翻看那些网文,又用现成的带socks的程序然后sniffer,算是知道了个大概,其实用程序编写出来很简单,关键就是rfc的协议说的不明不白的,所以造成本来很简单的事情,弄得大家全都一知半解。
socks4和socks4a只代理tcp。
socks4
比如ie可以直接用socks代理,但是ie只能用sock4代理,即使我现在用最新的ie9仍然如此。比如ie要用sock4访问百度,那么ie就先用本地的dns把百度转成ip比如202.108.22.5,然后向sock4服务器发送
04 01 00 50 CA 6C 16 05 41 64 6D 69 6E 69 73 74 72 61 74 6F 72 00
1、其中开头04 01是固定的
2、00 50是ie要连接站点的端口号,这里是80端口,十六进制就是00 50
3、CA 6C 16 05就是202.108.22.5的十六进制
4、41 64 6D 69 6E 69 73 74 72 61 74 6F 72是Administrator的acsii码
5、最后一个00也是固定的
这就是socks4的固定格式04 01+端口2字节+ip4字节+id+00,其中的id,这里是Administrator是可有也可以没有,因为我现在win7用的账户是Administrator所以ie就把账号名给发过去了,我试了一下最新的火狐4.0,他发送MOZ,有的就直接省略掉了
04 01 00 50 CA 6C 16 05 00 所以发成这样也行,随便写什么都行,只要最后一个是0中间没有0就行了。
如果代理服务器允许代理,比如验证一下那个id,比如你想只允许id是administrator后,允许代理了,就发回8个字节
04 5A 00 50 CA 6C 16 05
看到了吗,区别就是第二个字节是5A而且最后没有00,那么就是允许代理。其实根据协议5A这里可以换其他的反馈字节,但是我们就不要管了,如果你做的代理程序不允许他用,那么直接就在程序中断开连接就行了。
如果允许连接了,然后就把客户端的所有数据原封不动的发到远程主机,把收到远程主机的内容原封不动发回客户端就行了,以下我就简称交换交换就行了。
socks4a
细心的人会发现一个问题,在sock4中,客户端比如ie要用sock4代理访问百度,ie会在本地dns解析出百度的ip202.108.22.5,而不是通过sock4代理的那个机器的dns解析的,这样就会出现一个问题&#x