具体来说,我正在使用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。
答案 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();