如果我在工作时连接到本地局域网,我需要让我的应用程序通过内部IP访问我们的服务器,否则,我需要在野外时使用我们的外部IP。
目前,我只是尝试通过本地IP连接,然后尝试外部如果它失败...但是超时需要一点时间,我想知道是否有办法找出机器连接的域在尝试之前。
编辑:帕特里克>从本质上讲,该应用程序在平板电脑上运行,该平板电脑每天连接到本地网络几次。它通过网络连接的次数与它在本地连接的次数大致相等。
所有计算机在连接到网络时都有域帐户(并且域帐户的命名约定为“LOCTabletx”,其中x是机器在幻影时给出的编号。
我正在寻找的是一种快速查看机器是否已在我们的本地网络或互联网上连接的方法。使用Environment.UserDomainName获取LOCTabletx而不是域名。
修改
如果它可以帮助任何人,我只是尝试DNS解析我可以保证将在网络上的机器的名称(其中一个服务器)。它对我来说效果很好。
答案 0 :(得分:8)
你试过了吗?
Environment.UserDomainName
您还可以查看计算机上的活动IP地址,并查询适用于本地网络的IP地址...
var x = NetworkInterface.GetAllNetworkInterfaces()
.Where(ni => ni.OperationalStatus == OperationalStatus.Up)
.SelectMany(ni => ni.GetIPProperties().UnicastAddresses);
// do something with the collection here to determine if you're on the right network.
// just looping & printing here for example.
foreach (var item in x)
{
Console.WriteLine(item.Address);
}
在您弄清楚您所在的网络后,您可以订阅System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged事件,以便在您的应用运行时处理您的计算机跳转网络。
答案 1 :(得分:5)
System.Environment.UserDomainName
答案 2 :(得分:4)
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
未连接到网络时,将返回“NTLM”。
答案 3 :(得分:3)
您想查看Network Location Awareness API。它可以在Windows Vista或更高版本上使用,它允许您以编程方式发现您所连接的网络,并在此更改时收到通知。
您可能会以“这是一个家庭/工作/公共网络吗?”的形式熟悉它。对话框。
答案 4 :(得分:3)
另一种方式,但我不知道它实际上是否比其他解决方案更好:
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType
这是一个在活动目录下返回“Kerberos”的字符串。不知道当没有连接到域时它会说什么。
答案 5 :(得分:0)
Environment.UserDomainName
...如果您未加入域名,则会为您提供计算机名称。如果您加入域,它会为您提供域名。如果您将从网络加入域的计算机带出“野外”,即使您重新启动并重新登录(到您的域帐户),Environment.UserDomainName
也将继续提供域名。您的计算机将域凭据缓存大约30天。
如果您登录计算机帐户,则会获得计算机名称。