客户端通过 HTTP 代理与 Telnet 服务器通信

最近遇到一个业务需求:客户端自动登录远程Telnet服务器,然后自动发出一系列指令,返回指令执行结果。

这里,我采用 TcpClient 来与远程服务器Telnet服务通信(默认端口:23)。这方面,网络上有不少的代码与文章。

完成之后,因需求变更,遇到了一个新的问题,就是客户机器需要通过 HTTP 代理来连接公网的 Telnet 服务器。在这种情况,TcpClien 连接需要经过 HTTP 代理来与服务器通信。这方面代码几番求助度娘、谷歌无果。没办法,自己分析 HTTP 代理。

 

代理过程:

(1)客户机连接代理服务器;

(2)代理服务器请求连接Telnet服务器,Telnet服务器返回响应;

(3)代理服务器将Telnet返回响应传给客户端。

 

HTTP/1.0协议支持的请求方法有:GET、POST、PUT、DELETE、CONNECT等。同样HTTP代理服务器也这些请求方法。如:使用 GET/POST 方法代理访问网页等。

参考:http://blog.csdn.net/sky04/article/details/6659732

现在,要用的是 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,  0512);
             string receivedText = Encoding.ASCII.GetString(buffer,  0, received);
             //  成功.
             if (receivedText.IndexOf( " 200 ") > - 1)
                 return tcpClient;
             return  null;
        }
复制代码

 

 这样的 TcpClient 通过代理与 Telnet 服务通信成功。

 

 

 


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值