欢迎您访问我爱IT技术网,今天小编为你分享的电脑教程是网络协议方面的经验知识教程:客户端通过HTTP代理与Telnet服务器通信,下面是详细的分享!
客户端通过HTTP代理与Telnet服务器通信
客户端通过HTTP代理与Telnet服务器通信
最近遇到一个业务需求:客户端自动登录远程Telnet服务器,然后自动发出一系列指令,返回指令执行结果。
这里,我采用 TcpClient 来与远程服务器Telnet服务通信(默认端口:23)。这方面,网络上有不少的代码与文章。
完成之后,因需求变更,遇到了一个新的问题,就是客户机器需要通过 HTTP 代理来连接公网的 Telnetb 服务器。在这种情况,TcpClien 连接需要经过 HTTP 代理来与服务器通信。这方面代码几番求助度娘、谷歌无果。没办法,自己分析 HTTP 代理。
代理过程:
(1)客户机连接代理服务器;
(2)代理服务器请求连接Telnet服务器,Telnet服务器返回响应;
(3)代理服务器将Telnet返回响应传给客户端。
HTTP/1.0协议支持的请求方法有:GET、POST、PUT、DELETE、CONNECT等。
同样HTTP代理服务器也这些请求方法。如:使用 GET/POST 方法代理访问网页等。
现在,要用的是 CONNECT 请求方法,去连接 Telnet 服务器。如下:
CONNECT xxx.xxx.xxx.xxx:23 HTTP/1.0
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
xxx.xxx.xxx.xxx:23,为Telnet服务IP与端口。
接下来,就是利用HTTP代理,创建一个连接到Telnet服务器的 TcpCient 实例对象。
public TcpClient CreateTcpClient(string proxyHost, int proxyPort, string telnetHost, int telnetPort)
{
IPHostEntry entry=Dns.GetHostEntry(proxyHost);
IPEndPoint ipEndPoint=new IPEndPoint(entry.AddressList[0], proxyPort);
TcpClient tcpClient=new TcpClient(AddressFamily.InterNetwork);
tcpClient.Connect(ipEndPoint); // 连接代理服务器.
// CONNECT Telnet 服务器
string connectCommand=string.Format("CONNECT {0}:{1} HTTP/1.0\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)\n\n", telnetHost, telnetPort);
byte[] buffer=Encoding.ASCII.GetBytes(connectCommand);
tcpClient.GetStream().Write(buffer, 0, buffer.Length);
buffer=new byte[512];
int received=tcpClient.GetStream().Read(buffer, 0, 512);
string receivedText=Encoding.ASCII.GetString(buffer, 0, received);
// 成功.
if (receivedText.IndexOf("200") > -1)
return tcpClient;
return null;
}
这样的 TcpClient 通过代理与 Telnet 服务通信成功。
作者 chen11-1
以上就是关于客户端通过HTTP代理与Telnet服务器通信的网络协议知识分享,更多电脑教程请移步到>>电脑教程。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
