嘿,所有。我已经编写了一个程序,可以顺序扫描局域网中某些部分的计算机(将提供代码)。但是,当我运行此代码时,它只会返回正在运行的计算机的DNS主机名。我研究过使用WMI,但是我不能,因为我不会总是对被发现的计算机有好感。有没有其他方法可以找到本地计算机HostName?从局域网中的IP地址查找DNS主机名
using System;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
namespace CheckLocalNetwork
{
class PingCheck
{
public static string fullip;
public void CheckSequentialIP()
{
IPHostEntry IpEntry = Dns.GetHostEntry(fullip);
Ping pingSender = new Ping();
PingOptions options = new PingOptions();
options.DontFragment = true;
string data = "a";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 120;
PingReply reply = pingSender.Send(fullip, timeout, buffer, options);
if (reply.Status == IPStatus.Success)
{
Console.WriteLine("Address: {0}", reply.Address.ToString());
Console.WriteLine("Host Name: {0}", IpEntry.HostName);
Console.WriteLine("RoundTrip time: {0}", reply.RoundtripTime);
Console.WriteLine("Time to live: {0}", reply.Options.Ttl);
Console.WriteLine("Don't fragment: {0}", reply.Options.DontFragment);
Console.WriteLine("Buffer size: {0}", reply.Buffer.Length);
Console.WriteLine("");
}
}
static void Main(string[] args)
{
Console.WriteLine("Press enter to search for ip adresses that begin with 192.168.1");
Console.ReadLine();
for (int endofip = 1; endofip < 101; endofip++)
{
fullip = "192.168.1." + Convert.ToString(endofip);
PingCheck checkfullip = new PingCheck();
checkfullip.CheckSequentialIP();
}
Console.ReadLine();
}
非常感谢所有帮助。
当你编辑出现时,我正在写另一个“不那么”的评论。你说得对,nslookup没有返回任何对运行我的程序时出现的其他地址有用的东西。这是整个计划。建议一个正确的问题来解决这个问题,然后呢?在不使用WMI的情况下获取DNS主机名的一个可靠方法就是这里需要的,它仍然听起来像。 – Bloodyaugust 2010-01-04 23:35:32
这里的问题并不是真正的代码相关 - 它与你的网络设置有关。基本上,如果网络上的一台机器想要另一台机器的主机名,只给出它的IP地址,它只有几个选择。 1)查看本地主机文件中是否存在映射 - 对您的情况没有帮助。 2)询问一个DNS。除了一些传统的NetBIOS方法,这就是你所拥有的。 WMI也无济于事。 这实际上是一个系统管理员问题 - 您的DNS服务器应该有这些机器的条目。如果没有我的头脑,我真的无法想到一个解决方案。 – 2010-01-04 23:43:01
非常感谢您的帮助。 – Bloodyaugust 2010-01-04 23:46:14