嘿,所有。我已經編寫了一個程序,可以順序掃描局域網中某些部分的計算機(將提供代碼)。但是,當我運行此代碼時,它只會返回正在運行的計算機的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