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();
}
非常感谢所有帮助。
答案 0 :(得分:2)
嗯 - 您的代码示例在我的机器上按预期运行 - 即它返回正在扫描的机器的主机名。
要更深入地调查您的问题,您是否尝试使用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”。如果这不是导致问题的确切代码,尤其是如果它运行多线程,是否有可能在调用Dns.GetHostEntry
之前没有初始化“fullip”?
我可能会离开,但我认为在我看到你的问题时,我觉得值得大脑翻一下我的事情:)
[编辑:] - 您对kdt的评论澄清了我误解的内容。我想到你说你总是拿回你本地机器的主机名,无论你“扫描”哪台机器 - 这是非常奇怪的行为。事实上,我认为你说你只需要获取其他机器的IP地址(它们的IP地址),并且只获取本地的主机名。忽略我关于线程和空论点的最后一点。
这更容易解释 - 您的机器几乎肯定无法解析机器名称 - 我希望我建议的nslookup测试也不会返回机器名称。
为了将这些IP解析为主机名,您的计算机需要一个具有这些计算机条目的DNS,或者将它们放在本地主机文件中;当你进行这个调用时,你的机器实际上并没有询问远程机器的名字,所以它赢了;没有来自其常用名称解析路径的帮助就能找到它。
它对我有用,因为我的本地DNS确实有我网络上所有机器的条目,将其主机名解析为IP地址,反之亦然。