【问题标题】:Need to get local IP address (192.168.x.x)需要获取本地IP地址(192.168.x.x)
【发布时间】:2014-04-04 23:13:14
【问题描述】:

具体来说,我正在使用 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;
    }
  }

但这会返回 DNS 化 IP(外部),然后防火墙 NAT 将其返回到我想要的 IP。

【问题讨论】:

  • 说你的问题是“紧急的”是获得否决票的最佳方式,仅供参考。
  • 如果您知道您特别想要内部 IP,您不能在 foreach 中应用 if 来查找内部 IP?

标签: c# pdf dns ip nat


【解决方案1】:
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();

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 2010-12-13
    • 2014-10-16
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2017-01-30
    相关资源
    最近更新 更多