2014-03-03 30 views
-5

具体来说,我使用Essential Objects HtmlToPdf创建PDF。需要获得本地IP地址(192.168.x.x)

当用户点击“创建”按钮时,我需要获取服务器的非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我想要的。

+2

说你的问题是“紧急的”是获得降薪的最好方法,FYI。 – Blorgbeard

+0

已注意。谢谢... – vinco83

+0

如果你知道你特别想要内部IP,你不能在foreach中应用if来寻找内部IP吗? – OSborn

回答

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(); 
+2

@Downvoter,你认为哪部分是错误的? –