1

由于某种原因,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();

    }
4

1 回答 1

1

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

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

于 2013-08-14T08:54:39.633 回答