工作需要,需要用Java Socket穿越SOCKS代理服务器,网上胡乱搜一通,别怪哥说话难听,什么TMD的System.getProperties().put(......),java.net.Proxy全都不行,气急败坏,哥直接看协议去。
中文版SOCK4协议地址:http://zh.wikipedia.org/wiki/SOCKS
英文版SOCK5协议地址:http://www.ietf.org/rfc/rfc1928.txt
要想穿越代理服务器,必须要与代理服务器进行TCP连接,并实现一次或者多次握手过程。
拿SOCK4协议举例(本人代理环境为SOCK4,经测试已成功穿越)。
仔细阅读SOCK4协议,客户端要想穿越SOCK4协议与外网相连,需有一次握手过程,即客户端需向代理服务器发送一个字节序列,根据协议规范,我发送的字节序列为:
{0x04,0x01,0x1f,(byte)0x41,(byte)0xd3,(byte)0x8a,(byte)0xe0,0x35,0x00}
其中:
0X04:协议版本
0X01:CONNECT请求(0X02时为BIND请求)
0X1F 0X41:访问的外网端口(8001)
0XD3 0X8A 0XE0 0X35:访问的外网IP地址(211.138.224.53)
0X00:(相当于结束位的标志)
连接成功后,服务器端会返回应答序列,序列含义见SOCKS4协议(详细不再讲解)
握手成功后,Socket就可以按照和一般方式进行与外网服务器的通信了。
最后给出实现代码:
//穿越Socke4代理服务
Socket socket = new Socket("isasrv.hn.cmcc",1080);//代理服务器地址和端口
byte[] datas = {0x04,0x01,0x1f,(byte)0x41,(byte)0xd3,(byte)0x8a,(byte)0xe0,0x35,0x00};//发送的握手字节序列
OutputStream os = socket.getOutputStream();
os.write(datas);
byte[] receive = new byte[8]; //服务端返回的字节
InputStream is = socket.getInputStream();
int count = 0;
if((count = is.read(receive)) > 0) { //一定要先读服务器返回的字节序列
//System.out.println(count);
for(byte b : receive) {
System.out.println(Integer.toHexString((int)b));
}
}
os.write(...);//按照常规方式读写数据吧
receive = new byte[140];
is.close();
os.close();
socket.close();
在资料搜寻过程中发现了一个可以利用的现成类库jsocks,项目地址:http://jsocks.sourceforge.net/
有兴趣的可以去看下,实现机制完全相同。
有什么问题,留言吧!切记,出现问题不要幻想网上会给你指路,最终还是要靠自己!
分享到:
相关推荐
基于Netty框架的Socks5代理服务器 内容概要 本项目是一个基于Netty框架实现的Socks5代理服务器,支持Socks5协议的代理功能。项目包含了多个模块,涵盖了从客户端连接处理到服务器端代理转发的完整流程。主要功能...
"vc++编写的基于socket5的代理服务器源代码" 指的是一项使用Microsoft Visual C++(vc++)编程语言开发的软件项目,该项目实现了基于Socket5协议的代理服务器功能。Socket5是一种通用的代理协议,允许客户端通过...
基于Linux平台的SOCKS5代理服务器.pdf
SOCKS5是一种网络协议,它允许客户端通过代理服务器与任意IP地址的远程服务器进行通信。在C#中实现一个SOCKS5代理服务器涉及到多个关键概念和技术,这些包括网络编程、套接字(Sockets)、协议解析以及多线程等。...
标题中的"C#写的代理服务器源代码 功能强大 支持http和socks5"表明这是一个用C#编程语言编写的代理服务器程序,它具备处理HTTP和SOCKS5两种协议的能力。HTTP代理主要处理Web浏览器的请求,而SOCKS5代理则是一个更...
在本项目中,我们主要关注的是实现了 SOCKS4 和 SOCKS5 协议的代理服务器。 SOCKS (Socket Secure) 是一种通用的代理协议,最初设计为TCP协议的代理,但后来也支持UDP。SOCKS4 协议是较早版本,主要处理TCP连接,不...
SOCKS(Socket Secure)是一种网络协议,允许客户端通过代理服务器与任意端口的另一台服务器进行通信。SOCKS5是该协议的最新版本,它提供了更好的安全性和身份验证机制。相比于早期的SOCKS4,SOCKS5支持UDP(用户...
1. **选择代理类型**:根据网络环境,选择合适的代理类型,如HTTP代理、SOCKS4/5代理等。每种代理类型有其特定的协议和连接方式。 2. **构造代理地址**:代理服务器通常由IP地址或域名及端口号组成,例如:"192.168...
在这个项目中,开发者使用Java和Netty框架实现了Socks5代理服务器,并结合了TLS加密,从而创建了一个安全的代理服务。具体实现可能包括以下步骤: 1. **设计协议解析器**:Netty的ChannelHandlerContext和...
代理IP,全称为代理服务器的IP地址,它作为用户设备与目标服务器之间的中介,可以隐藏用户的原始IP,提供匿名访问或者提高访问速度。代理IP分为多种类型,其中HTTP和HTTPS代理主要处理基于HTTP(超文本传输协议)和...
Socks5代理服务器是代理协议的一种,相较于早期的Socks4,Socks5提供了更全面的功能和更高的安全性。它允许客户端通过代理服务器与任何类型的网络服务进行通信,包括TCP和UDP。Socks5的主要优点在于其身份验证机制,...
c#编写的socks代理服务器 支持sock4 sock4a sock5 sock5支持tcp和udp sock5支持匿名模式和用户名密码验证模式 运行需.net framework 2.0 http://blog.csdn.net/laotse/archive/2011/04/07/6306767.aspx
文档详细描述,linux不通外网的情况下,通过在另一台通外网的服务器搭建socks5代理服务,不通外网的服务器通过socks5代理,成功向外网发送邮件的功能。
易语言纯命令的socks5服务器源码,如果连接数超过了100,请自行修改对应算法和数组。@易语言学习论坛-落叶兰。
易语言实现超级代理服务端源码,支持http+socks4+socks5.zip
基于 hp-socket 开发的代理服务器, 多连接,速度非常的快 使用了一个端口实现了同时提供 HTTP和SOCKS4的代理协yi,支持 HTTPS 连接 由于是 SOCKS4 所以不支持密码验证 (IE也只支持SOCKS4) SOCKS4的协yi只做了简单...
无需编译, 解压后直接执行 make install
作者:Kingthy早上看到breeze写了一篇Socks5代理协议的文章《C# 实现Socket5代理协议通讯 》,并在评论里看到howaaa说“顺便也讲讲用C#实现一个Socks5代理服务器吧,这方面资料很少,相信很有价值”,于是一时兴起,...