上一篇介绍的是TCP代理的鉴权过程,这篇将介绍UDP代理的大致鉴权过程。
在UDP鉴权过程中,有几点是需要注意的。首先,UDP是一种无连接协议,不需要连接,使用广播的方式;其次,为了通过鉴权,所以需要使用TCP的连接过程;最后,需要代理服务器根据是否有UDP数据包的判断来保持TCP的长连接。
在上一篇中已经介绍了需要的文件,这里就不再重复了。类似TCP,同样创建一个文件SJXUDPSocketClient,继承自NSURLProtocol,其他信息可参看demo,这里直接介绍关键步骤。
第一步:设置UDP代理地址和端口,分别绑定并且监听本地端口和远端端口。
第二步:当UrlProtocol拦截到UDP请求时,会调用 - (void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(nullable id)filterContext 方法,在该方法中判断UDP请求的来源,并进行对应的操作。
如果来源为本机,则通过TCP连接与远端代理进行鉴权。
第三步:与远端代理服务器进行鉴权的第一步,同上一篇文章中的第一步鉴权,同样以 050102 为例。
第四步:如果第一步鉴权通过,则进行第二步鉴权,同上一篇文章中的第二步鉴权,根据自己的需求,拼接自己的用户名和密码,发送给远端代理服务器。
第五步:如果第二步鉴权通过,则向代理服务器发起UDP请求。
第六步:如果代理服务器接收到命令,并且鉴权通过,则会分配一个IP和PORT,进行转发UDP请求。
以上就是UDP代理鉴权的大致过程,这是自己对UDP代理的理解,希望各位大神多多指正。