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

转载于:https://www.cnblogs.com/sjxjjx/p/8384393.html

iOS进阶之TCP代理鉴权过程相关推荐

  1. 关于身份认证和鉴权过程

    关于身份认证和鉴权过程 开机信令流程 总结: 附 重要消息内容举例 LTE NAS EMM Plain OTA Outgoing Message -- Attach request Msg(含PDN ...

  2. aka鉴权 ims_IMS鉴权过程中各参数的用途

    IMS 鉴权过程中各参数的用途 发帖日期: 2011-08-18 14:12:52 按照目前的国际规范, IMS 认证方式主要有 IMS AKA . SIP Digest . NASS-IMS Bun ...

  3. springboot做代理分发服务+代理鉴权

    还原背景 大家都做过b-s架构的应用,也就是基于浏览器的软件应用.现在呢有个场景就是FE端也就是前端工程是前后端分离的,采用主流的前端框架VUE编写.服务端采用的是springBoot架构. 现在有另 ...

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

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

  5. Spring Security实战--(五)认证和鉴权过程

    前面几篇直接讲了Demo,但是可能还是有点混乱,这里再将整个认证过程梳理一下,加深对前面的理解 一.标准的身份验证方案 对一个系统来说,标准的安全身份验证方案应该按如下步骤: 用户使用用户名和密码登录 ...

  6. Android pms权限管理,PMS权限管理和鉴权过程

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

  7. 【Gorho】springboot整合Shiro+jwt 前后端分离 超级详细的shiro+jwt鉴权过程

    shiro+jwt+springboot 说在前面 简介 项目环境(pom.xml) 项目结构(各种包和类) 鉴权流程 具体代码 配置Shiro 配置JWTUtils 定义JwtFilter 定义Jw ...

  8. LiveNVR传统IP摄像机接入-网页直播实现跨域鉴权

    LiveNVR如何实现跨域鉴权 LiveNVR提供简单的登录鉴权,客户端通过用户名密码登录成功后,服务端返回认证token的cookie, 后续的接口访问, 服务端从cookie读取token进行校验 ...

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

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...

最新文章

  1. 矩阵乘法的性能提升 AutoKernel
  2. mysql dump 参数_mysqldump常用参数
  3. 还只是 39 岁!一个天才年轻程序员的陨落
  4. 总结——LR学习总结
  5. 移植Python2到TQ2440
  6. String、StringBuilder和StringBuffer
  7. 7-25 雨刷程序功能扩展设计 (100 分)
  8. 密歇根安娜堡大学的计算机科学教授,美国密歇根大学安娜堡分校读机械硕士在美国好就业吗?...
  9. LoRa 和NB-IoT 那个才是智慧停车低成本的最佳选择
  10. ubuntu安装配置jdk
  11. DataGridView带图标的单元格实现
  12. 信息学奥赛一本通C++语言——1040:输出绝对值
  13. Konomi与去中心化借贷协议bZx合作推动DeFi生态发展
  14. 开源中国 OsChina Android 客户端源码分析(12)清理缓存
  15. HTTP代理怎样使用
  16. 英语邮件中常用的礼貌用语
  17. Photoshop 渐变工具使用
  18. 微信哪个电话能转人工服务器,如何联系微信人工客服?掌握好窍门,只需30秒可接通,亲测有效...
  19. 钉钉邮箱登录入口_钉邮的使用攻略②
  20. python圣斗士修炼(十八):访问mysql数据库

热门文章

  1. 【滑动窗口】leetcode1456:定长子串中元音的最大数目
  2. MPEG2简单码流分析
  3. VC2010 编译 Media Player Classic - Home Cinema (mpc-hc)
  4. python tkinter text改变文本字体颜色_Python3 tkinter基础 Button text,fg 按钮上显示的文字 文字的颜色...
  5. mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
  6. matlab 中最小二乘拟合,matlab 最小二乘拟合
  7. python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
  8. 在HTTPS安全页面中加载HTTP不安全的内容,如何绕过安全警告?
  9. java将数组置零的函数,Java Script 数组内置函数
  10. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(9)签到题4题