利用dns類和wmi規範獲取ip及mac位址
在c#程式設計中,要獲取主機名和主機ip位址,是比較容易的.它提供的dns類,可以輕鬆的取得主機名和ip位址.
示例:string strhostname = dns.gethostname(); //得到本機的主機名
iphostentry ipentry = dns.gethostbyname(strhostname); //取得本機ip
string straddr = ipentry.addresslist[0].tostring(); //假設本地主機為單網絡卡
在這段**中使用了兩個類,乙個是dns類,另乙個為iphostentry類,二者都存在於命名空間system.net中.
dns類主要是從網域名稱系統(dns)中檢索關於特定主機的資訊,上面的**第一行就從本地的dns中檢索出本地主機名.
iphostentry類則將乙個網域名稱系統或主機名與一組ip位址相關聯,它與dns類一起使用,用於獲取主機的ip位址組.
要獲取遠端主機的ip位址,其方法也是大同小異.
在獲取了ip位址後,如果還需要取得網絡卡的mac位址,就需要進一步**了.
這裡又分兩種情況,一是本機mac位址,二是遠端主機mac位址.二者的獲取是完全不同的.
在獲取本機的mac位址時,可以使用wmi規範,通過select語句提取mac位址.在.net框架中,wmi規範的實現定義在system.management命名空間中.
managementobjectsearcher類用於根據指定的查詢檢索管理物件的集合
managementobjectcollection類為管理物件的集合,下例中由檢索物件返回管理物件集合賦值給它.
示例:managementobjectsearcher query =new managementobjectsearcher("select * from win32_networkadapterconfiguration") ;
managementobjectcollection querycollection = query.get();
foreach( managementobject mo in querycollection )
獲取遠端主機的mac位址時,需要借用api函式sendarp.該函式使用arp協議,向目的主機傳送arp包,利用返回並儲存在快取記憶體中的ip和mac位址對,從而獲取遠端主機的mac位址.
示例:int32 ldest= inet_addr(remoteip); //目的ip
int32 lhost= inet_addr(localip); //本地ip
try
catch(exception err)
",err.message);
} return 0.tostring();
但使用該方式獲取mac時有乙個很大的限制,就是只能獲取同網段的遠端主機mac位址.因為在標準網路協議下,arp包是不能跨網段傳輸的,故想通過arp協議是無法查詢跨網段裝置mac位址的。
示例程式:
using system.net;
using system;
using system.management;
using system.runtime.interopservices;
public class getip
//獲取本機的mac
public string getlocalmac()
return(mac);
}//獲取遠端主機ip
public string getremoteip(string remotehostname)
catch(exception err)
",err.message);
} return 0.tostring();
} public static void main(string args)
{getip gi = new getip();
console.writeline("本地網絡卡資訊:");
console.writeline(gi.getlocalip() + " - " + gi.getlocalmac());
console.writeline("\n\r遠端網絡卡資訊:");
string temp = gi.getremoteip("scmobile-tj2");
for(int i=0;i
socket,UDP傳送ARP包 c 實現
內容可能和網上很多大神寫的類似,我也沒有什麼創新的地方,全當寫日記了,學了網路程式設計和計算機系統之後,覺得對ip資料報有了些了解,所以想嘗試一下能不能寫出區域網arp攻擊工具出來.以下是思路1.先了解arp攻擊 的原理,攻擊物件是我舍友,我想要讓他不能正常上網,所以給他傳送arp閘道器欺騙包,告訴...
C 獲取IP等網路資訊
1 asp.net中獲取ip資訊 page.request.userhostname 獲取客戶端主機名稱 page.request.userhostaddress 獲取客戶端主機ip位址 2 webservice中獲取客戶端ip資訊 httpcontext.current.request.userh...
C 通過飛信WebService傳送免費簡訊
在上一編文章 c 非同步呼叫飛信webservice實時接收簡訊 的基礎上,再在視窗新增三個控制項如下 加textbox控制項用於輸入目標好友號 命名 tofno。加textbox控制項用於輸入簡訊內容 命名 msgtxt,設此控制項multiline true,使能輸入多行,並拖大些 加一butt...