从局域网IP地址查找DNS主机名
-
18-09-2019 - |
题
嘿所有。我已经写一个程序,顺序地扫描一个LAN的某些部分为计算机(将被提供的代码)。然而,当我运行此代码,它只返回其上运行的计算机的DNS主机名。我看着使用WMI,但我不能,因为我不会总是有被发现的权限可以在计算机上。是否有任何其他的方式找到一个本地计算机主机名?
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来检查IP地址解析?
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\Rob>nslookup <-- type this at a command prompt
Default Server: mydns.mydomain.co.uk <--- these two lines indicate the dns server being used to resolve your queries
Address: 192.168.0.1 <----|
> 192.168.0.5 <---- type in the ip address of one of the machines in question
Server: mydns.mydomain.co.uk
Address: 192.168.0.1
Name: myworkstation.mydomain.co.uk <---- this is the hostname, as reported by the DNS using a reverse lookup
Address: 192.168.0.5
如果这不返回机器名,那么你可能有一个不相关的代码名称解析问题。
如果这一切看起来不错,那么它也可能是值得列举IpEntry.Aliases
集合。是否有任何条目这里,和他们做有意义吗?
最后 - 是你上面那样的代码的代码是怎么了?你,还是一个“蒸”的例子吗?我要求的原因是,对于Dns.GetHostEntry
状态的文档
当一个空字符串作为传递“ 主机名,此方法将返回 本地主机的IPv4地址“。
我也注意到你在一个静态的“fullip”。如果这不是导致问题的确切的代码,特别是如果这种运行多线程的,有机会你没有初始化“fullip”的Dns.GetHostEntry
调用之前?
我可能是路要走,但我的想法是值得给予什么发生在我一个倾吐心事,我看了你的问题:)
[修改] - 以KDT您的评论澄清的东西我误解。我的认为的你说你总是回来为您的本地机器的主机名,无论哪台机器你“扫描” - 这是非常奇怪的行为。事实上,我认为你的意思是你刚刚回来的其他机器的IP地址(其IP地址),只有获得本地主机名。不顾我对线程和空参数最后一位。
这是更容易解释 - 你的机器几乎可以肯定只是不能够解决机器的名字 - 我希望我的Nslookup的测试,我认为也不会返回计算机名称。
为了解决这些IP对主机名,你的机器需要有条目这些机器,或者让他们在其本地hosts文件一个DNS;你的机器是不是真正的询问的远程计算机的名称,当你做这个调用,因此深得; T为能够找到它,而不会脱离其通常的域名解析路径之一帮助
它为我,因为我的本地DNS确实有项对所有我的网络上的机器,解决他们的主机名到IP地址,反之亦然。