C#实现Socket5代理协议通讯

这里主要讲的是用.NET实现基于Socket5下面的代理协议进行客户端的通讯,Socket4的实现是类似的,注意的事,这里不是讲用C#实现一个代理服务器,因为实现一个代理服务器需要实现很多协议,头大,而且现在市面上有很多现成的代理服务器用,性能又好,直接用不好吗?而是用C#来实现客户端通过一个代理服务器进行Socket5的通讯,这个简单点,一般来说用Socket5就好了,Socket4现在也逐渐淘汰,基本上代理服务器都支持Socket5。

首先我们要了解下Socket5的代理协议是基于TCP协议之上的,从Socket4扩展上来的,用于提供给其他协议例如HTTP、FTP所作用的一套防火墙协议。

(这里做点小解释,实际上应该是SOCKS V5协议,但是目前网上都用Socket5这样称呼,目前本文也暂时这样称)

然后下面简单的说下该协议的内容,具体分为两部分:

一部分是基于TCP协议的客户

当一个基于TCP协议的客户端希望与一个只能通过防火墙可以到达的目标(这是由实现所决定的)建立连接,它必须先建立一个与SOCKS服务器上SOCKS 端口的TCP连接。通常这个TCP端口是1080。当连接建立后,客户端进入协议的“握手(negotiation)”过程:认证方式的选择,根据选中的方式进行认证,然后发送转发的要求。SOCKS服务器检查这个要求,根据结果,或建立合适的连接,或拒绝。是不是有点像FTP?差不多。

握手的过程:

客户端连到服务器后,然后就发送请求来协商版本和认证方法:

VER NMETHODS METHODS
1 1 1 to 255

这个版本的SOCKS协议中,VER字段被设置成X'05'。NMETHODS字段包含了在METHODS字段中出现的方法标示的数目(以字节为单位)。简化就是像服务器发送05 01 00

服务器从这些给定的方法中选择一个并发送一个方法选中的消息回客户端:

VER METHOD
1 1

如果选中的消息是X’FF’,这表示客户端所列出的方法列表中没有一个方法被选中,客户端必须关闭连接。

这里我们关注的是 X’00’ 不需要认证和X’02’ 用户名/密码,简化是服务器会返回的前两个字节

会是05 00或者05 02,02的时候进行验证。

验证过程结束后,客户端就发送详细的请求信息。如果协商的方法中有以完整性检查和/或安全性为目的的封装,这些请求必须按照该方法所定义的方式进行封装。

握手完成之后,要进行一个请求连接,这个就是对远程服务器的连接,我们知道当前既然连接的是代理服务器,我们实际上发送数据的对象并不是它,也就是我们要告诉代理服务器去连接真实的某某,现在就是在做这一步了。

SOCKS请求的格式如下:

VER CMD RSV ATYP DST.ADDR DST.PROT
1 1 X’00’ 1 Variable 2
时间: 2024-08-30 00:45:45

C#实现Socket5代理协议通讯的相关文章

请求-关于HTTP代理协议的一些问题

问题描述 关于HTTP代理协议的一些问题 请问如果通过一个HTTP代理服务器请求网页假设请求内容为index.html main.css do.js 那么整个请求过程是以下的1还是2? 1:connect() //连接代理send() //GET index.htmlrecv()send() //GET main.cssrecv()send() //GET do.jsrecv() closesocket() //断开代理 2.connect() //连接代理send() //GET index.

使用IP地址在两个android手机之间如何通讯?

问题描述 使用IP地址在两个android手机之间如何通讯? 3g连接的基础上,能否可以分别查询200个android手机的IP地址? 能否直接使用IP 地址进行TCP通信吗? 希望大家给点建议,谢谢! 解决方案 直接P2P是不行的,因为移动上网时,是先连到运营商(如联通)的大局域网再通过网关转到公网,手机分配的IP是10.xx.xx.xx,并不是公网IP,你从外面查手机的IP都是运营商网关IP.而且两台手机也不一定在同一局域网段,也就不能保证直接互联能一定成功.解决办法还是像QQ一样,搞个服务

[Lync]lync同步通讯簿

概述 在客户现场部署lync的时候,突然发现新安装的lync客户端,搜索联系人功能无法使用,而将lync客户端安装后,隔一段时间后,又可以查询了,发现可能是数据没有同步的原因. 解决方案 客户端地址簿同步时间 当你登录Lync客户端时,客户端需要1-60分钟从服务器ABS下载GalContact.db和GalContacts.db.idx这两个地址簿文件. 所以此时你将无法使用模糊查询,当你查询'-'时,客户端会提示你说地址簿正在同步. 我们可以通过修改注册表,让客户端马上下载GalContac

VB 6.0能不能和手机上的微信软件进行通讯?怎么给微信软件发送消息?

问题描述 VB 6.0能不能和手机上的微信软件进行通讯?怎么给微信软件发送消息? VB 6.0能不能和手机上的微信软件进行通讯?怎么给微信软件发送消息? 解决方案 微信有一套开发供调用的API,在VB6.0里通过调用这些API然后保证你的网络是通畅的,应该能给微信软件发消息

模拟器 pc 通讯-android模拟器与pc服务器通讯

问题描述 android模拟器与pc服务器通讯 我现在做的可以实现模拟器和pc通讯,但是pc只能被动的接受信息然后在返回信息.那我要如何做才可以实现pc可以主动的发送消息给模拟器呢? 解决方案 通过sockect可以实现.服务端在PC端,客户端在Android模拟器.可以参考一下这个:http://blog.csdn.net/x605940745/article/details/17001641 解决方案二: 使用基于长连接的Socket可以实现,通信是双向的

异常-rmi通讯部分方法调用成功,部分调用失败

问题描述 rmi通讯部分方法调用成功,部分调用失败 rmi运行一段时间后,可能是几天也可能是几周.突然rmi客户端出现部分rmi方法调用不通.抛异常java.rmi.unmarshalException:error unmarshlling return;nested exception is; java.io.EOFException at sum.rmi.server.UnicastRef.invoke(UnicastRef.java:173)

Android-非常棒的HTTP通讯总结

  这里有一个非常棒的http通讯的总结,我看了以后茅塞顿开. 先贴代码: 01 public class Activity1 extends Activity { 02   03     private final String DEBUG_TAG = "System.out"; 04   05     private TextView mTextView; 06     private Button mButton; 07   08     protected void onCre

串口通讯 16进制转换-串口数据校验及ID提取怎么处理?

问题描述 串口数据校验及ID提取怎么处理? 现在有一份通讯规约 同步字/` 长度 / 命令字/ 数据区 / 校验 0xAA - - - - 1字节 1字节 1字节 0-253字节 1字节 长度计算范围:命令字-校验 校验计算范围:同步字-数据区 校验算法:字节累加和,丢弃溢出 数据区:如果没有数据,可以为空 对齐方式:大端对齐 串口波特率:9600 8数据位 无校验 1位停止位 协议指令和数据: 1.实时上传进出门数据 同步字 /长度 /命令字 / 数据区 /校验 0xAA - 0x02 进出门

开发板-关于linux下can的相互通讯

问题描述 关于linux下can的相互通讯 最近在做在linux下can的相互通讯,可是开发板上的例程只有一部分,我是个新手不知道怎么补全. 请问谁有这方面的资料啊?用的什么板子?收发程序是什么?请各位大哥们帮帮忙,小弟谢谢你们啦 解决方案 看看这个:嵌入式Linux下的多通道CAN通信平台 http://wenku.baidu.com/link?url=_3QEKJw5K78_NG3x7s9yvN9uMMqkhzvgVQFwqo50CiBbsnEFiNSEm_brL7iW1M7PsKyOdQn