zoukankan      html  css  js  c++  java
  • iOS进阶之TCP代理鉴权过程

      这段时间接触了网络代理,而自己的任务是完成TCP和UDP的网络代理,所以在这里写些自己的理解吧。

      这篇文章先介绍一下TCP代理的鉴权过程(采用的是用户名和密码鉴权),下一篇文章再介绍UDP代理的鉴权过程吧。

      自己写了一个sdk的demo,主要使用的是CocoaAsyncSocket里的GCDAsyncSocket和GCDAsyncUdpSocket。其他使用的文件参见下图

        

      创建SJXTCPSocketClient,继承自NSURLProtocol。在 .h 文件中添加关键的成员变量和方法,如下图

        

      在 .m 文件中添加一个记录通信管道的对象,用于保存tcp本地通信和远端通信的管道,并进行相应的通信操作。

        

      第一步:设置TCP代理地址和端口,并开启监听。    

        

      第二步:当UrlProtocol拦截到TCP请求时,会调用 didAcceptNewSocket ,则设置tcp本地通信管道的连接。   

        

      第三步:- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 会响应,判断上一步操作的 tag标记,建立tcp本地通信管道的连接。

        

      第四步:- (void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag 会响应,判断上一步操作的 tag标记,完成tcp本地通信管道的连接。

        

      第五步:- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag 会响应,根据 tag标记,设置与远端连接的协商方式。

        

      这里使用的是用户名和密码的协商方式,设置tcp远端通信管道的连接。

        

      第六步:didConnectToHost 会响应,开始与代理服务器的进行第一步鉴权操作

        

      根据自己的需求,完成自己需要的数据,这里以  050102  为例

        

      第七步:这里会响应 didWriteDataWithTag,再设置读取的data,让 didReadData响应,对代理服务器返回data进行第一步鉴权结果的判断。如果第一步鉴权成功,则根据自己的要求设置对应的用户名和密码,将用户名和密码根据要求拼接成正确的data发给代理服务器,进行与代理服务器的第二步鉴权操作。

        

        

      第八步:同样的这里会响应 didWriteDataWithTag,再设置读取的data,让 didReadData响应,这里对代理服务器返回data进行第二步鉴权结果的判断。如果第二步鉴权通过,则代理服务器尝试与目标服务器进行连接。

        

      第九步:通过 didWriteDataWithTag 和 didReadData 的响应,如果代理服务器与目标服务器进行连接成功,则可以进行 tcp代理转发数据。

        

      自己写了一个demo,以供参考。希望各位大神多多指正。

      GitHub:https://github.com/sjxjjx/SJXSocket

  • 相关阅读:
    Visitor Pattern (Visitor设计模式)
    JS DatePicker: jscalendar1.0___v1.51 (JS日期选择器)
    转:Mediator模式
    转: Debug with IIS Express
    101 LINQ Samples
    关于进程与线程:About Processes and Threads
    转:PureMVC示例 CafeTownsend
    Haskell Editor:Leksah & EclipseFP The Haskell plugin for Eclipse
    Haskell、C#、Java、C 程序执行效率比较 :Write your first parallel Haskell program
    SCJP: java exerciese 1
  • 原文地址:https://www.cnblogs.com/sjxjjx/p/8384393.html
Copyright © 2011-2022 走看看