線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1877
推到 Plurk!
推到 Facebook!

如何根據網路內的IP地址得到該機的MAC地址?

尚未結案
billyguo
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-05 11:05:23 IP:219.133.xxx.xxx 未訂閱
各位大大:一個局域網內,如何根據IP位址得到該機的MAC地址?
alphakao
一般會員


發表:0
回覆:18
積分:8
註冊:2002-07-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-05 13:47:41 IP:210.202.xxx.xxx 未訂閱
Dos Command 下打 arp -a
billyguo
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-05 14:22:20 IP:219.133.xxx.xxx 未訂閱
我問的是在DELPHI代碼實現!請高手不吝賜教!
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-06 00:57:25 IP:211.162.xxx.xxx 未訂閱
Hi,billyguo,您好! 小弟的一點淺見,也許能對您解決問題有所啓迪:    小弟認爲不妨把思路的放到:ARP協定上來。ARP協定是“Address Resolution Protocol”(位址解析協定)的縮寫,它的作用是將IP位元址轉換成物理位址(就是MAC位址),具體的應用將通過IP Helper API中的SendARP()函數來實現。SendARP()是Microsoft Platform SDK中提供用來獲得目標主機的MAC位址的函數,其描述爲: DWORD SendARP( IPAddr DestIP, IPAddr SrcIP, PULONG pMacAddr, PULONG PhyAddrLen ); 通過MSDN,可以查詢到: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/sendarp.asp 如需要深入理解和掌握其用法,下面兩篇文章是非常不錯的資料(原理和使用講解的非常清晰明瞭,而且後面還有作者完整的code): http://www.zdnet.com.cn/developer/code/story/0,2000081534,39046680-1,00.htm http://www.zdnet.com.cn/developer/code/story/0,2000081534,39050622,00.htm 由於資料的差異,您可能需要自己去將iphlpapi.h轉化爲.pas喲!我到覺得不如用C 實現其功能,做成DLL供Delphi使用!小弟在Delphi下也沒有實做過,純粹亂來的< >。權當一種思路,供您參考< > ================================= 人生在勤,不索何獲 業精於勤荒於嬉,行成於思毀於隨 臨淵羡魚不如退而結網
------
人生在勤,不索何获?
alphakao
一般會員


發表:0
回覆:18
積分:8
註冊:2002-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-06 12:34:13 IP:210.202.xxx.xxx 未訂閱
Dos 下的 arp 有 Pipe 的功能 你可以用 winexec 或 shellAPI 去執行 類似 arp -a > c:\arptable.txt 之類的,在去讀 c:\arptable.txt 就可以了, 這種方法不只 Delphi 能用吧? VB C 都可以 很多你能在 shell 裡面就作完的工作其實真的不用花太多工夫 20 分能作完的事別花到 8 小時 Function GetMAC(IP:String):String; Function CallShell(CMD,Para:String):Boolean;Stdcall; var execinfo:TSHELLEXECUTEINFO; Begin fillchar(execinfo,sizeof(execinfo),0); execinfo.cbsize:=sizeof(execinfo); execinfo.lpverb:=PChar('open'); execinfo.lpfile:=pchar(CMD); execinfo.lpparameters:=Pchar(Para); execinfo.fmask:=SEE_MASK_NOCLOSEPROCESS; execinfo.nshow:=SW_HIDE; Result:=shellexecuteex(@execinfo); waitforsingleobject(execinfo.hprocess,infinite); End; var MyFile:TextFile; MAC:String; Data:String; MyIP,MyMAC:String; Begin CallShell('Command','/C Ping -n 1 ' IP); CallSHell('Command','/C arp -a > c:\ArpTab.txt'); AssignFile(MyFile,'c:\arptab.txt'); Reset(MyFile); MAC:=''; while (not eof(MyFile)) or (MAC = '') do Begin readln(MyFile,Data); MyIP:=Trim(Copy(Data,1,24)); MyMAC:=Copy(Data,25,17); if Trim(Copy(Data,1,24)) = IP then Begin MAC:=MyMAC; End; end; CloseFile(MyFile); deletefile('c:\arptab.txt'); Result:=MAC; End; 如果你要用 iphelp api Function GetRmtMac(IP:String):String; var PMyTable:PMIB_IPNETTABLE; TableSize:Dword; RIP:Dword; i:Integer; RES:String; Begin RES:=''; New(PMyTable); RIP:=Inet_Addr(PCHAR(IP)); TableSize:=SizeOf(MIB_IPNETTABLE); GetIpNetTable(PMyTable,TableSize,TRUE); for i := 0 to PMyTable.dwNumEntries -1 do begin IF PMyTable^.table[i].dwAddr = RIP then Begin RES:=IntToHex(PMyTable^.table[i].bPhysAddr[0],2) IntToHex(PMyTable^.table[i].bPhysAddr[1],2) IntToHex(PMyTable^.table[i].bPhysAddr[2],2) IntToHex(PMyTable^.table[i].bPhysAddr[3],2) IntToHex(PMyTable^.table[i].bPhysAddr[4],2) IntToHex(PMyTable^.table[i].bPhysAddr[5],2); Break; End; end; Dispose(PMyTable); Result:=RES; end; 但是 Delphi 沒有內建對 iphelp 的定義檔 你要自己上網找 iphelp 的定義 或者 你要自己翻 MSDN 自己定義
billyguo
一般會員


發表:5
回覆:8
積分:2
註冊:2004-03-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-06 18:02:09 IP:218.18.xxx.xxx 未訂閱
Alphakao大大,真是太謝謝你!同時也感謝bigdogchina!可惜不能同時給分!
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-04-26 13:51:34 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-03 12:44:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!