用C#實現實現簡單的 Ping 的功能,用於測試網路是否已經聯通
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("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;
}
private void button1_Click(object sender, EventArgs e)//擷取IP
{ textBox2.Text=GetIpByHostName(textBox1.Text); }
private void button2_Click(object sender, EventArgs e)//擷取主機名稱
{ textBox1.Text=GetHostNameByIp(textBox2.Text); }
private void button3_Click(object sender, EventArgs e)//擷取本機IP
{
string hostName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(hostName);
//Dns.GetHostByName(myName);已淘汰
IPAddress[] addr = ipEntry.AddressList;
textBox2.Text = addr[0].ToString();
}
/// <summary>
/// 區域網路搜尋事件
/// </summary>
private void LanSearch()
{
string localhost = (Dns.GetHostEntry(Dns.GetHostName()))
.AddressList[0].ToString(); //本地主機IP地址
string str = localhost.Substring(0, localhost.LastIndexOf("."));
for (int i = 0; i < 255; i++) //建立255個線程掃描IP
{
string ip = str + "." + i.ToString();
this.Text = ip;
if (Ping(ip))
{
listBox1.Items.Add(ip);
Application.DoEvents();
}
progressBarSearch.Value = progressBarSearch.Value + 1;
}
}
private void button4_Click(object sender, EventArgs e)//線上主機
{
LanSearch();
}