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
转载于:https://www.cnblogs.com/sjxjjx/p/8384393.html
iOS进阶之TCP代理鉴权过程相关推荐
- 关于身份认证和鉴权过程
关于身份认证和鉴权过程 开机信令流程 总结: 附 重要消息内容举例 LTE NAS EMM Plain OTA Outgoing Message -- Attach request Msg(含PDN ...
- aka鉴权 ims_IMS鉴权过程中各参数的用途
IMS 鉴权过程中各参数的用途 发帖日期: 2011-08-18 14:12:52 按照目前的国际规范, IMS 认证方式主要有 IMS AKA . SIP Digest . NASS-IMS Bun ...
- springboot做代理分发服务+代理鉴权
还原背景 大家都做过b-s架构的应用,也就是基于浏览器的软件应用.现在呢有个场景就是FE端也就是前端工程是前后端分离的,采用主流的前端框架VUE编写.服务端采用的是springBoot架构. 现在有另 ...
- PMS权限管理和鉴权过程
一.权限的管理基础知识 1.系统的权限机制分为:权限解析.权限分配.鉴权.动态添加权限 2.PermissionInfo : PackageParser.Permission中包含一个对应的Perm ...
- Spring Security实战--(五)认证和鉴权过程
前面几篇直接讲了Demo,但是可能还是有点混乱,这里再将整个认证过程梳理一下,加深对前面的理解 一.标准的身份验证方案 对一个系统来说,标准的安全身份验证方案应该按如下步骤: 用户使用用户名和密码登录 ...
- Android pms权限管理,PMS权限管理和鉴权过程
一.权限的管理基础知识 1.系统的权限机制分为:权限解析.权限分配.鉴权.动态添加权限 2.PermissionInfo : PackageParser.Permission中包含一个对应的Perm ...
- 【Gorho】springboot整合Shiro+jwt 前后端分离 超级详细的shiro+jwt鉴权过程
shiro+jwt+springboot 说在前面 简介 项目环境(pom.xml) 项目结构(各种包和类) 鉴权流程 具体代码 配置Shiro 配置JWTUtils 定义JwtFilter 定义Jw ...
- LiveNVR传统IP摄像机接入-网页直播实现跨域鉴权
LiveNVR如何实现跨域鉴权 LiveNVR提供简单的登录鉴权,客户端通过用户名密码登录成功后,服务端返回认证token的cookie, 后续的接口访问, 服务端从cookie读取token进行校验 ...
- 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...
最新文章
- 矩阵乘法的性能提升 AutoKernel
- mysql dump 参数_mysqldump常用参数
- 还只是 39 岁!一个天才年轻程序员的陨落
- 总结——LR学习总结
- 移植Python2到TQ2440
- String、StringBuilder和StringBuffer
- 7-25 雨刷程序功能扩展设计 (100 分)
- 密歇根安娜堡大学的计算机科学教授,美国密歇根大学安娜堡分校读机械硕士在美国好就业吗?...
- LoRa 和NB-IoT 那个才是智慧停车低成本的最佳选择
- ubuntu安装配置jdk
- DataGridView带图标的单元格实现
- 信息学奥赛一本通C++语言——1040:输出绝对值
- Konomi与去中心化借贷协议bZx合作推动DeFi生态发展
- 开源中国 OsChina Android 客户端源码分析(12)清理缓存
- HTTP代理怎样使用
- 英语邮件中常用的礼貌用语
- Photoshop 渐变工具使用
- 微信哪个电话能转人工服务器,如何联系微信人工客服?掌握好窍门,只需30秒可接通,亲测有效...
- 钉钉邮箱登录入口_钉邮的使用攻略②
- python圣斗士修炼(十八):访问mysql数据库
热门文章
- 【滑动窗口】leetcode1456:定长子串中元音的最大数目
- MPEG2简单码流分析
- VC2010 编译 Media Player Classic - Home Cinema (mpc-hc)
- python tkinter text改变文本字体颜色_Python3 tkinter基础 Button text,fg 按钮上显示的文字 文字的颜色...
- mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
- matlab 中最小二乘拟合,matlab 最小二乘拟合
- python爬取天气预报并发送短信_Python3爬虫教程之利用Python实现发送天气预报邮件...
- 在HTTPS安全页面中加载HTTP不安全的内容,如何绕过安全警告?
- java将数组置零的函数,Java Script 数组内置函数
- 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(9)签到题4题