嘿所有。我已经写一个程序,顺序地扫描一个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地址,反之亦然。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top