这段时间接触了网络代理,而自己的任务是完成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

iOS进阶之TCP代理鉴权过程的更多相关文章

  1. iOS进阶之UDP代理鉴权过程

    上一篇介绍的是TCP代理的鉴权过程,这篇将介绍UDP代理的大致鉴权过程. 在UDP鉴权过程中,有几点是需要注意的.首先,UDP是一种无连接协议,不需要连接,使用广播的方式:其次,为了通过鉴权,所以需要 ...

  2. PMS权限管理和鉴权过程

    一.权限的管理基础知识 1.系统的权限机制分为:权限解析.权限分配.鉴权.动态添加权限 2.PermissionInfo :  PackageParser.Permission中包含一个对应的Perm ...

  3. EasyNVR如何实现跨域鉴权

    EasyNVR提供简单的登录鉴权,客户端通过用户名密码登录成功后,服务端返回认证token的cookie, 后续的接口访问, 服务端从cookie读取token进行校验. 但是, 在与客户系统集成时, ...

  4. Tomcat 容器的安全认证和鉴权

    大量的 Web 应用都有安全相关的需求,正因如此,Servlet 规范建议容器要有满足这些需求的机制和基础设施,所以容器要对以下安全特性予以支持: 身份验证:验证授权用户的用户名和密码 资源访问控制: ...

  5. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

  6. Mongodb 认证鉴权那点事

    [TOC] 一.Mongodb 的权限管理 认识权限管理,说明主要概念及关系 与大多数数据库一样,Mongodb同样提供了一套权限管理机制. 为了体验Mongodb 的权限管理,我们找一台已经安装好的 ...

  7. springboot+security整合(3)自定义鉴权

    说明 springboot 版本 2.0.3源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+se ...

  8. gitlab配置smtp时,总是提示需要鉴权,记录一下爬坑过程。

    配置好smtp,然后发送邮件时总是提示 Net::SMTPFatalError: 550 5.7.1 authentication is required 最后发现是因为在gitlab web界面上配 ...

  9. apigw鉴权分析(1-4)新浪微博开放平台 - 鉴权分析

    一.访问入口 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E 微博开放接口的调用,如 ...

随机推荐

  1. 男默女泪,ArcGIS AddIN 编辑逻辑赏析,走过路过,不要错过

    看到了一段ESRI写的一个工具,我反编译了一下,学习工具中的几个代码片段 一. IEditTask task = (this._editor as IEditTaskSearch).get_TaskB ...

  2. ARM_DMA学习

    AMBA: advanced(高级) microcontroller bus architecture; 利用多层总线系统减少DMA传输和CPU中断的延迟: DMA流或DMA通道,流优先级,Adres ...

  3. OO第二次阶段性总结

    前两次作业我都无效了……用了很久时间但还是没能弄明白多线程的写法,以后还是要学会即时的多问问会的同学吧…… 以及我的Mertrics在挣扎很久之后还是用不了……跪了 第七次作业 第七次作业能够完成的原 ...

  4. 构建Dubbo-2.0.7源码

    一. 下载源码: git clone --branch dubbo-2.0.7 https://github.com/apache/incubator-dubbo.git 二. 下载依赖 git cl ...

  5. Python 3+selenium+unittest+HTMLTestRunner生成测试报告

    一.下载HTMLTestRunner.py,解压,将它放到 python安装路径的site-packages目录下 https://pan.baidu.com/s/1epWlibxbxWlNoIcxL ...

  6. Luogu4113 [HEOI2012]采花

    题目大意:给定一个长度为$n$的序列$a_i$,$m$次询问,每次询问$[l,r]$,求在区间内有多少个数出现了至少2次. 数据范围:$1\leq l\leq r\leq n\leq 2*10^6,1 ...

  7. 温习排序算法(基于C指针)

    以前学过的数据结构课,貌似已经忘得一干二净了,偶然又翻起,书中最后一章详细介绍了7种排序算法,现在对其中4种做个总结.(为啥只总结4种,当然是因为偷懒,只想总结简单又常用的!) 先贴一张排序分类图: ...

  8. 2016(5)系统设计,web应用

    试题五(共25分) 阅读以下关于Web应用的叙述,在答题纸上回答问题1至问题3. 某软件企业拟开发一套基于Web的云平台配置管理与监控系统,该系统按租户视图.系统管理视图以及业务视图划分为多个相应的W ...

  9. openpyxl.utils.exceptions.IllegalCharacterError

    如果是手动调用 xlwt 这种第三方库除了错可能没法找错误,但是从错误中我们看到错误是由 openpyxl 抛出的,我们试着从 openpyxl 中找解决方案 出错处的代码 value = value ...

  10. Ribbon标题语句

    感谢每一次成长的喜悦和感动,谢谢一路有你!我会比从前更爱你,希望     你能陪我走过这一生!网址:http://www.uc123.com/