获取 NATed 虚拟服务器中用户的 IP

Get IP of user in NATed virtual server

我在 VirtualBox 中有 Windows 服务器,并为此使用了 NATed 端口 80。 Request.UserHostAddress returns 虚拟网络的本地IP。 我应该如何获得用户的IP?

您要获取用户的 public IP 地址吗? 最简单的方法是简单地创建一个 PHP 脚本来回显远程地址,或者使用现有的 API 这样做。

PHP:

<?php
    echo $_SERVER["REMOTE_ADDR"];
?>

C#:

using (var client = new HttpClient()) {
    var response = await client.GetStringAsync(new Uri("URL"));
    IPAddress ip;

    if (IPAddress.TryParse(response, out ip)) {
        //Success
    }
}

你遇到的问题是你看不到 NATing 之外的东西。 NAT 代表 Network Address Translation,所以在这种情况下,您看到的是 NAT 设备的 public IP 地址,而不是客户端。这就是它的工作方式。客户端可以发送其本地 IP 地址,但您需要在客户端上安装一些东西才能做到这一点。

另一种选择是从 NAT 切换到桥接网络。桥接意味着 VM 所在的虚拟网络与主机所在的物理网络并排连接。这意味着它们将拥有位于同一子网上的 IP 地址,并且可以从同一网络上的任何其他地方路由。网桥就像 switches/hubs,NAT 就像路由器。

只要您的服务器/客户端之间没有任何 NAT 设备,使用标准机制(例如 context.Request.ServerVariables["REMOTE_ADDR"]Request.UserHostAddress 等)IP 应该很容易可见