Socket.RemoteEndPoint返回网关地址

时间:2013-08-14 02:10:32

标签: c# sockets

由于某种原因,C#socket.RemoteEndPoint开始返回默认网关的地址。它曾经工作,我知道代码没有改变。我不确定它何时开始发生,因为日志不能回到足够远的地方所以我不确定这台服务器会发生什么原因导致这种情况发生。一切似乎都正常。只是没有获得远程IP。

任何人都知道可能导致这种情况的原因是什么?

以下是相关代码。

    public void startClientListening(string ipString, int port)
    {

                IPAddress ip = IPAddress.Parse(ipString);

                // Create the listening socket...
                clientListenerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                IPEndPoint ipLocal = new IPEndPoint(ip, port);
                // Bind to local IP Address...
                clientListenerSocket.Bind(ipLocal);
                // Start listening...
                clientListenerSocket.Listen(32);
                // Create the call back for any client connections...
                clientListenerSocket.BeginAccept(onClientConnect, clientListenerSocket);
    }

    private void onClientConnect(IAsyncResult asyn)
    {
            Socket workerSocket = clientListenerSocket.EndAccept(asyn);
            workerSocket.NoDelay = true;

            //This returns 192.168.1.1 rather than the remoteIp
            string remoteIp = ((IPEndPoint)workerSocket.RemoteEndPoint).Address.ToString();

    }

1 个答案:

答案 0 :(得分:0)

如果默认网关之前是路由器/ IP防火墙,但现在它是代理/应用程序防火墙,则会发生这种情况。

在这种情况下,ip连接由代理实例化,因此您可以看到代理的IP地址,而不是真实客户端的IP地址。