您的位置:首页 > 编程语言 > C#

局域网中根据IP地址反查主机的名称(C#)

2007-10-11 08:14 330 查看
你遇到过这种情况吗?你的防火墙报告局域网中的某个IP地址的电脑正在攻击你,但是防火墙却没有提示发出攻击的电脑名称,到底谁的电脑在攻击呢(攻击你的电脑可能是中毒了)?有一天早上你刚刚上班,打开电脑后发现连接不了服务器,到服务器那里一看才知道,原来有人使用了服务器的IP地址,到底谁在使用服务器的IP地址呢?nslookup 可以实现域名(主机名)的反查IP地址。哈哈,但今天说的是用C#实现。

1. 根据IP地址获得主机名称

/// <summary>

/// 根据IP地址获得主机名称

/// </summary>

/// <param name="ip">主机的IP地址</param>

/// <returns>主机名称</returns>

public string GetHostNameByIp(string ip)

{

ip = ip.Trim();

if (ip == string.Empty)

return string.Empty;

try

{

// 是否 Ping 的通

if (this.Ping(ip))

{

System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(ip);

return host.HostName;

}

else

return string.Empty;

}

catch (Exception)

{

return string.Empty;

}

}

说明:如果你的电脑可以上网你甚至可以查询到:IP地址“64.233.189.104”是 Google 的一个名为“hk-in-f104.google.com”的主机的IP地址。



关于代码中 this.Ping(ip) 方法后面再说。

既然说了如何“根据IP地址获得主机名称”,那就要再说说如何“根据主机名获得主机的IP地址”吧。

2. 根据主机名获得主机的IP地址

/// <summary>

/// 根据主机名(域名)获得主机的IP地址

/// </summary>

/// <param name="hostName">主机名或域名</param>

/// <example>GetIPByDomain("pc001"); GetIPByDomain("www.google.com");</example>

/// <returns>主机的IP地址</returns>

public string GetIpByHostName(string hostName)

{

hostName = hostName.Trim();

if (hostName == string.Empty)

return string.Empty;

try

{

System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(hostName);

return host.AddressList.GetValue(0).ToString();

}

catch (Exception)

{

return string.Empty;

}

}

说明:如果你的电脑可以上网你甚至可以查询到:“www.google.com”的IP地址是“64.233.189.104”。



最后,再说说C#实现简单的 Ping 的功能,用于测试网络是否已经联通。

3. C#实现简单的 Ping 的功能,用于测试网络是否已经联通

/// <summary>

/// 是否能 Ping 通指定的主机

/// </summary>

/// <param name="ip">ip 地址或主机名或域名</param>

/// <returns>true 通,false 不通</returns>

public bool Ping(string ip)

{

System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping();

System.Net.NetworkInformation.PingOptions options = new System.Net.NetworkInformation.PingOptions();

options.DontFragment = true;

string data = "Test Data!";

byte[] buffer = Encoding.ASCII.GetBytes(data);

int timeout = 1000; // Timeout 时间,单位:毫秒

System.Net.NetworkInformation.PingReply reply = p.Send(ip, timeout, buffer, options);

if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)

return true;

else

return false;

}

本文地址:/article/4741631.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: