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

时间:2015-01-10 17:28:50

标签: c# asp.net virtualbox nat

我在VirtualBox中使用Windows Server,为此使用NATed端口80。 Request.UserHostAddress返回虚拟网络的本地IP。 我该如何获得用户的IP?

2 个答案:

答案 0 :(得分:1)

您遇到的问题是您无法超越NAT。 NAT代表Network Address Translation,因此在这种情况下,您将看到NAT设备的公共IP地址,而不是客户端。这就是它的工作方式。客户端可以发送其本地IP地址,但您需要在客户端上安装一些内容才能执行此操作。

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

只要您的服务器/客户端之间没有任何NAT设备,就可以使用标准机制轻松查看IP(例如context.Request.ServerVariables["REMOTE_ADDR"]Request.UserHostAddress等)

答案 1 :(得分:-1)

您想获取用户的公共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
    }
}