我正在尝试在Azure VM上设置自定义服务器。我已经为它分配了一个公共IP地址,我可以通过远程桌面访问并进入服务器,因此该部分工作正常。
但是当我尝试使用the websocket-sharp library绑定到公共IP地址时,它失败了,说“主机部分不是本地主机名。”
我已将其跟踪到this file,执行以下代码块,最后返回false:
var host = System.Net.Dns.GetHostName ();
var addrs = System.Net.Dns.GetHostAddresses (host);
foreach (var addr in addrs) {
if (address.Equals (addr))
return true;
}
return false;
通过一些调试,我确定Dns.GetHostAddresses
仅显示内部IP,但不显示外部IP地址。我在Azure中配置了IP地址并将其连接到服务器,我在网络配置中启用了IP转发并重新启动了VM,但服务器仍然无法识别自己的外部IP。
我错过了什么?
答案 0 :(得分:0)
我错过了什么?
您可以使用本地计算机主机名测试 Dns.GetHostAddresses ,它也可以获取内部 ip,它与Azure VM无关。
如果我们想要使用主机名获取Azure VM的公共IP,我们可以使用Azure SDK来执行此操作。
我还做了一个示例演示来获取公共IP。在此之前,我们需要注册Azure AD并为注册的App分配相应的角色。关于如何注册Azure AD并创建信用文件,您可以引用另一个SO thread和此link。
var subscriptiondId = "subscription Id";
var credentials = SdkContext.AzureCredentialsFactory.FromFile(@"path of creditial file");
var resouceGroup = "resouce group";
var hostName = "host name";
NetworkManagementClient networkManagement = new NetworkManagementClient(credentials) { SubscriptionId = subscriptiondId };
ComputeManagementClient computeManagement =
new ComputeManagementClient(credentials) {SubscriptionId = subscriptiondId};
var nic = computeManagement.VirtualMachines.GetAsync(resouceGroup, hostName).Result.NetworkProfile.NetworkInterfaces
.FirstOrDefault();
var networkIntefaceName = nic?.Id.Split('/').Last();
var ipConfiguration = networkManagement.NetworkInterfaces.GetAsync(resouceGroup, networkIntefaceName).Result.IpConfigurations.FirstOrDefault();
var publicIpAddressId = ipConfiguration?.PublicIPAddress.Id;
var ip = networkManagement.PublicIPAddresses.GetAsync(resouceGroup, publicIpAddressId?.Split('/').Last()