c# - 如何从负载均衡器后面获取客户端的 IP 地址?

标签 c# .net tcpclient

我正在使用 TcpClient 在端口上监听请求。当请求来自客户端时,我想知道发出请求的客户端 ip。

我试过:

Console.WriteLine(tcpClient.Client.RemoteEndPoint.ToString());
Console.WriteLine(tcpClient.Client.LocalEndPoint.ToString());
var networkStream = tcpClient.GetStream();
var pi = networkStream.GetType().GetProperty("Socket", BindingFlags.NonPublic | BindingFlags.Instance);
var socketIp = ((Socket)pi.GetValue(networkStream, null)).RemoteEndPoint.ToString();
Console.WriteLine(socketIp);

所有这些地址都输出 10.x.x.x 地址,这些地址是私有(private)地址,显然不是发出请求的我网络外的客户端的地址。我该怎么做才能获得发出请求的客户端的公共(public) IP?

编辑: 我们正在使用具有 tcp 转发功能的 Amazon EC2 负载均衡器。有没有办法在此设置中获取真实的客户端 ip?

最佳答案

这行吗:

((IPEndPoint)tcpClient.Client.RemoteEndPoint).Address.ToString()

如果客户端通过内部网络连接到您,我不确定您是否可以获得他们的公共(public) IP,因为返回客户端的连接不需要该信息。

关于c# - 如何从负载均衡器后面获取客户端的 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717381/

相关文章:

c# - DELETE 命令超时

c# - 我如何将 Bing Maps API for WPF 与另一种本地化/文化一起使用?

c# - 检查 .NET 动态程序集是暂时的还是持久的

c# - DLR项目死了吗?

c# - 使用 NetworkStream 接收文件随机失败,但始终与 Thread.Sleep() 一起使用

c# - 动态输入数据时 TCP 服务器无法正确接收

c# - 使用网络流发送和接收数据 C#

c# - 在 unity3d 中运行时结束协程

.net - 在 Windows Powershell(或 dotNet 又名 .net)中执行 textwrap 和 dedent

c# - 无法在 C# 中捕获 0xC0000005 异常