|
|
我在写一个简单的Socks 5代理服务器,
在处理UDP请求的时候需要把本地IP,和绑定的端口发送回给客户端
于是我在获取本地IP的地方遇到了难题。
因为代理服务器往往是多IP的,建立监听套接字时,指定的IP是0,即准备由操作系统决定。
但是,客户端只能与代理服务器的某个IP建立连接,我想得到的就是这个IP地址。
Socks 5 的开头部分是TCP连接,
于是我调用了函数 getsockname 分析与客户端建立连接的套接字描述符connfd,
发现获得的本地IP是0,即是建立监听套接字是指定的IP。
如果用 gethostname , 那么对于多IP地址的代理服务器来说,也无法确定客户端与代理服务器建立的连接是基于哪个IP
关于端口的获得,在本地创建一个UDP套接字,绑定的IP和端口都是0,即还是由操作系统决定。但是,我可以通过 getsockname 获得端口号,但是我却无法获得IP地址(即是0)
因此这个问题,很使我困惑,在这里诚心请教大家。 |
|