C# 網絡編程之獲取本機名、ip地址、域名、物理位置
在C#網絡編程中,主機域名與ip之間能相互轉換,同時DNS中有Dns類、IPHostEntry類、IPAddress類、DnsPermission類實現DNS的一些簡單功能。
下麵主要講述一個C#的Windows應用程序,實現以下功能:
(1).獲取主機名稱;
(2).獲取本地電腦的ip地址;
(3).輸入遠程域名www.xxx.com,查詢其網址的ip地址;
(4).根據其遠程網址的ip地址,查找其物理位置;
(5).根據物理位置實現查找當地位置的天氣預報(未實現).
具體步驟如下:
1.創建C#項目
點擊”文件”->”新建項目”->”C# Windows應用程序”,選擇存儲位置與項目名稱,創建一個ipAddress項目.
2.添加控件
在”解決方案”中右鍵Form1.cs,查看其代碼設計器.設置如下圖所示的控件,界麵設計的具體屬性如下:
6個Label控件,其Text屬性分別對應”主機名稱”、”ip地址”..和”天氣預報”;
6個textBox控件,其中除”查詢遠程域名(輸入)”是輸入形如:www.xxx.com外,其餘均是輸出相應的獲取結果,對應的TextBox1-TextBox6;
1個richTextBox控件,提供高級輸入編輯文本功能控件,左邊textBox中顯示的結果在此處同時顯示匯總結果;
2個button控件,分別是”開始查詢”和”清除記錄”,清空richTextBox中內容.
3.添加新的命名控件
//添加新的命名空間
usingSystem.Net;
usingSystem.IO;
usingSystem.Xml;
在.NET平台對Dns類的命名控件是System.Net:調用其函數方法獲取本地名稱、ip地址、域名ip間轉換.System.IO可以提供編碼IO流的操作(似乎沒用到),System.Xml是根據ip地址,通過訪問”有道”網站查詢實際物理位置中獲取xml網頁等操作使用.
4.雙擊”開始掃描”按鈕,添加相應的事件代碼
privatevoidbutton1_Click(objectsender,EventArgse)
{
//添加代碼實現具體功能操作,具體如下
}
如果想添加"清除記錄"功能,則雙擊"清除記錄"按鈕,添加下麵代碼即可實現:
privatevoidbutton2_Click(objectsender,EventArgse)
{
richTextBox1.Clear(); //清理記錄
}
具體代碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; //添加新的命名空間 using System.Net; using System.IO; using System.Xml; namespace ipAddress { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //點擊按鈕"開始查詢"創建Click事件 private void button1_Click(object sender, EventArgs e) { //構造一個主機對象 IPHostEntry兩個常用屬性(AddressList地址列表|HostName主機名稱) IPHostEntry myHost = new IPHostEntry(); try { //一.通過獲取主機名HostName獲取主機Host信息 myHost = Dns.GetHostByName(Dns.GetHostName()); //textBox1編輯框:顯示主機名稱 textBox1.Text = myHost.HostName.ToString(); //richTextBox1高級文本輸入編輯控件:AppendText函數追加本地主機信息 richTextBox1.AppendText("1.本地主機名稱-->"+myHost.HostName.ToString()+"\r"); //二.獲取本地ip地址 for (int i = 0; i < myHost.AddressList.Length; i++) { textBox2.Text = myHost.AddressList[i].ToString(); richTextBox1.AppendText("2.本地主機ip地址-->"+myHost.AddressList[i].ToString()+"\r"); } //三.輸入遠程ip地址\域名查詢 //構造一個遠程主機對象和字符串變量strIP存儲ip地址 IPHostEntry otherHost = new IPHostEntry(); int j; //Resolve函數:將域名轉換為ip地址 www.baidu.com otherHost = Dns.Resolve(textBox3.Text); //獲取遠程查詢ip地址 for (j = 0; j < otherHost.AddressList.Length; j++) { textBox4.Text = otherHost.AddressList[j].ToString(); richTextBox1.AppendText("3.遠程域名-->"+textBox3.Text+"\r*ip地址-->"+otherHost.AddressList[j].ToString()+"\r"); } //四.ip地址查找對應的物理位置 //通過訪問有道網站查詢ip的物理位置 (方法二:下載一個ip庫,查找ip庫中的內容) string sURL = "https://www.youdao.com/smartresult-xml/search.s?type=ip&q=" + otherHost.AddressList[j-1].ToString() + ""; //youdao的URL //定義字符串變量存儲物理位置 string stringIpAddress = ""; //獲取youdao返回的xml格式文件內容 using (XmlReader read = XmlReader.Create(sURL)) { while(read.Read()) //從流中讀取下一個字節 { switch (read.NodeType) { case XmlNodeType.Text: //取xml格式文件當中的文本內容 查詢的是最後一個ip地址AddressList[j-1] if (string.Format("{0}", read.Value).ToString().Trim() != otherHost.AddressList[j-1].ToString()) { stringIpAddress = string.Format("{0}", read.Value).ToString().Trim(); //賦值 } break; } } } //textBox5對話框:賦值物理位置並追加至richTextBox1末尾 textBox5.Text = stringIpAddress; richTextBox1.AppendText("4.物理位置-->"+stringIpAddress+"\r"); } catch(Exception msg) { MessageBox.Show(msg.Message); //提示錯誤信息 } } private void button2_Click(object sender, EventArgs e) { richTextBox1.Clear(); //清理記錄 } } }
5.運行結果
輸入www.google.com,點擊"開始查詢"
輸出結果如下圖所示:
可以看到,我的主機名稱為delldell及本地的ip地址.同時查詢的google的相應ip地址很多,在richTextBox中顯示遠程域名的ip地址,其中物理地址為最後一個ip地址74.125.31.104的物理位置為“美國加利福利亞州山景市穀歌公司”
(注意:天氣預報我沒有做該功能,但原理相同通過訪問一個天氣預報的網站,根據物理位置顯示相應的天氣,原理相同)
6.總結
這是我最近學習C#網絡編程的自己編寫的一個實例,通過獲取ip地址你可以做很多的事情,譬如QQ等網站顯示的你所在地天氣預報、判斷異地登陸、黑客攻擊等,這是一個很基礎的System.Net\System.Xml的相關方法函數的使用。
而在根據ip地址輸出判斷其物理位置中使用的是popping_dancer的博客知識,上麵的代碼“四.ip地址查找對應的物理位置”也是引用轉載他的文章,希望大家也能看看他的這篇文章,非常有用。非常感謝博主及他的文章,網址如下:
https://blog.csdn.net/popping_dancer/article/details/8297038
他采用的方法是通過獲取ip地址,訪問“有道”網址查看對應的物理位置,上麵訪問google其訪問過程如下圖所示:
上麵僅僅是我對C#網絡編程,DNS、域名、ip地址、物理位置轉換之間的一些認識,僅供大家學習與了解,如果有錯誤或不足之處,見諒!希望能幫助大家。
( 2013-7-8 By:Eastmount)
最後更新:2017-04-03 16:48:32