需要获取本地IP地址(192.168.x.x)

时间:2014-03-03 18:42:35

标签: c# pdf dns ip nat

具体来说,我正在使用Essential Objects HtmlToPdf创建PDF。

当用户点击“创建”按钮时,我需要获取服务器的非NAT IP地址(192.168.xx),以便我可以强制它从该地址创建PDF,而不是主机名

整体问题是:在Web服务器上,站点的主机名实际上并没有让您访问该站点,因为DNS正在指定外部IP地址,这会以某种方式导致连接被阻止。因此,例如 - www.testsite.com正在转换为公共IP地址,因此服务器上的PDF创建者无权访问。

我创建了一个主机文件条目,强制www.testsite.com转到内部ip。但这对于多次安装来说是一场噩梦。

我试过

string hostName = HttpContext.Current.Request.Url.Host;
  IPHostEntry ipAddressList = Dns.GetHostEntry(hostName);
  string ipAddress = "";
  foreach (IPAddress ip in ipAddressList.AddressList)
  {
    if (ip.AddressFamily == AddressFamily.InterNetwork)
    {
      ipAddress = ip.ToString();
      break;
    }
  }

但是返回DNSed IP(外部),然后是防火墙NAT到我想要的IP。

1 个答案:

答案 0 :(得分:3)

var ips = NetworkInterface.GetAllNetworkInterfaces()
            .Where(x => x.NetworkInterfaceType != NetworkInterfaceType.Loopback)
            .Where(x => x.OperationalStatus == OperationalStatus.Up)
            .SelectMany(x => x.GetIPProperties().UnicastAddresses)
            .Where(x => x.Address.AddressFamily == AddressFamily.InterNetwork)
            .Select(x => x.Address)
            .ToList();