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

如何藉由查詢MAC address而得到其IP address ?

尚未結案
kensoong
初階會員


發表:31
回覆:70
積分:45
註冊:2003-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-21 00:22:20 IP:211.76.xxx.xxx 未訂閱
各位先進與前輩: 請教一個位題... 如何藉由查詢MAC address而得到其IP address ? 反方向又如何? 謝謝賜教.
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-22 00:23:56 IP:61.217.xxx.xxx 未訂閱
引言: 各位先進與前輩: 請教一個位題... 如何藉由查詢MAC address而得到其IP address ? 反方向又如何?
Uses NB30    function TForm1.GetMACAdress: string;
  var
    NCB       : PNCB;
    Adapter   : PAdapterStatus;        URetCode  : PChar;
    RetCode   : char;
    I         : integer;
    Lenum     : PlanaEnum;
    _SystemID : string;
    TMPSTR    : string;
  begin
    Result := '';
    _SystemID := '';
    Getmem(NCB, SizeOf(TNCB));
    Fillchar(NCB^, SizeOf(TNCB), 0);        Getmem(Lenum, SizeOf(TLanaEnum));
    Fillchar(Lenum^, SizeOf(TLanaEnum), 0);        Getmem(Adapter, SizeOf(TAdapterStatus));
    Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);        Lenum.Length := chr(0);
    NCB.ncb_command := chr(NCBENUM);
    NCB.ncb_buffer := Pointer(Lenum);
    NCB.ncb_length := SizeOf(Lenum);
    RetCode := Netbios(NCB);        i := 0;
    repeat
      Fillchar(NCB^, SizeOf(TNCB), 0);
      Ncb.ncb_command := chr(NCBRESET);
      Ncb.ncb_lana_num := lenum.lana[I];
      RetCode := Netbios(Ncb);          Fillchar(NCB^, SizeOf(TNCB), 0);
      Ncb.ncb_command := chr(NCBASTAT);
      Ncb.ncb_lana_num := lenum.lana[I];          Ncb.ncb_callname := '* ';          Ncb.ncb_buffer := Pointer(Adapter);          Ncb.ncb_length := SizeOf(TAdapterStatus);
      RetCode := Netbios(Ncb);          if (RetCode = chr(0)) or (RetCode = chr(6)) then
      begin
        _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2)   '-'  
        IntToHex(Ord(Adapter.adapter_address[1]), 2)   '-'  
        IntToHex(Ord(Adapter.adapter_address[2]), 2)   '-'  
        IntToHex(Ord(Adapter.adapter_address[3]), 2)   '-'  
        IntToHex(Ord(Adapter.adapter_address[4]), 2)   '-'  
        IntToHex(Ord(Adapter.adapter_address[5]), 2);
      end;
      Inc(i);
      until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
      FreeMem(NCB);
      FreeMem(Adapter);
      FreeMem(Lenum);
      GetMacAdress := _SystemID;
end;    procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  label1.Caption := GetMACAdress;
end;
╭╧╮╭╧╮╭╧╮╭╧╮╭╮│║│║│║ ╘∞╛╘∞╛╘∞╛╘∞╛ . ﹒﹒‧∴ ☆.....
kensoong
初階會員


發表:31
回覆:70
積分:45
註冊:2003-05-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-23 19:17:03 IP:211.76.xxx.xxx 未訂閱
NB30 ? Where and how ? Is it built-in Delphi ? I don't think so. Thanks.
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-23 21:26:53 IP:61.217.xxx.xxx 未訂閱
引言: NB30 ? Where and how ? Is it built-in Delphi ? I don't think so.
╭╧╮╭╧╮╭╧╮╭╧╮╭╮│║│║│║ ╘∞╛╘∞╛╘∞╛╘∞╛ . ﹒﹒‧∴ ☆.....
kensoong
初階會員


發表:31
回覆:70
積分:45
註冊:2003-05-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-23 22:45:07 IP:211.76.xxx.xxx 未訂閱
Sorry, you misunderstand what I mean... PS:I coded PASCAL & Delpi programs for many many years... Is NB30 a standard component (built-in) in Delphi ? And your answer is getting MAC address from IP...not IP from MAC address. Following post also the same result for MAC address... unit MaunUnt; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, NB30, Dialogs, StdCtrls; type TMainFmt = class(TForm) Label1: TLabel; edMAC: TLabel; ComboBox1: TComboBox; btnGetMac: TButton; Label2: TLabel; btnResetMAC: TButton; procedure FormCreate(Sender: TObject); procedure btnGetMacClick(Sender: TObject); procedure btnResetMACClick(Sender: TObject); private { Private declarations } public { Public declarations } end;var MainFmt: TMainFmt;implementation{$R *.dfm}type TNBLanaResources = (lrAlloc, lrFree);type PMACAddress = ^TMACAddress; TMACAddress = array[0..5] of Byte;function GetLanaEnum(LanaEnum: PLanaEnum): Byte;var LanaEnumNCB: PNCB;begin New(LanaEnumNCB); ZeroMemory(LanaEnumNCB, SizeOf(TNCB)); try with LanaEnumNCB^ do begin ncb_buffer := PChar(LanaEnum); ncb_length := SizeOf(TLanaEnum); ncb_command := Char(NCBENUM); NetBios(LanaEnumNCB); Result := Byte(ncb_cmd_cplt); end; finally Dispose(LanaEnumNCB); end;end;function ResetLana(LanaNum, ReqSessions, ReqNames: Byte; LanaRes: TNBLanaResources): Byte;var ResetNCB: PNCB;begin New(ResetNCB); ZeroMemory(ResetNCB, SizeOf(TNCB)); try with ResetNCB^ do begin ncb_lana_num := Char(LanaNum); // Set Lana_Num ncb_lsn := Char(LanaRes); // Allocation of new resources ncb_callname[0] := Char(ReqSessions); // Query of max sessions ncb_callname[1] := #0; // Query of max NCBs (default) ncb_callname[2] := Char(ReqNames); // Query of max names ncb_callname[3] := #0; // Query of use NAME_NUMBER_1 ncb_command := Char(NCBRESET); NetBios(ResetNCB); Result := Byte(ncb_cmd_cplt); end; finally Dispose(ResetNCB); end;end;function GetMACAddress(LanaNum: Byte; MACAddress: PMACAddress): Byte;var AdapterStatus: PAdapterStatus; StatNCB: PNCB;begin New(StatNCB); ZeroMemory(StatNCB, SizeOf(TNCB)); StatNCB.ncb_length := SizeOf(TAdapterStatus) 255 * SizeOf(TNameBuffer); GetMem(AdapterStatus, StatNCB.ncb_length); try with StatNCB^ do begin ZeroMemory(MACAddress, SizeOf(TMACAddress)); ncb_buffer := PChar(AdapterStatus); ncb_callname := '* ' #0; ncb_lana_num := Char(LanaNum); ncb_command := Char(NCBASTAT); NetBios(StatNCB); Result := Byte(ncb_cmd_cplt); if Result = NRC_GOODRET then MoveMemory(MACAddress, AdapterStatus, SizeOf(TMACAddress)); end; finally FreeMem(AdapterStatus); Dispose(StatNCB); end;end;procedure TMainFmt.FormCreate(Sender: TObject);var LanaEnum: PLanaEnum; I: Integer;begin New(LanaEnum); ZeroMemory(LanaEnum, SizeOf(TLanaEnum)); try if GetLanaEnum(LanaEnum) = NRC_GOODRET then begin with ComboBox1, Items do begin Sorted := True; BeginUpdate; Clear; for I := 0 to Byte(LanaEnum.length) - 1 do Add(IntToStr(Byte(LanaEnum.lana[I]))); ItemIndex := 0; EndUpdate; end; end; finally Dispose(LanaEnum); end;// ResetButton.Enabled := (Win32Platform = VER_PLATFORM_WIN32_NT);end;procedure TMainFmt.btnGetMacClick(Sender: TObject);var LanaNum: Byte; MACAddress: PMACAddress; RetCode: Byte;begin LanaNum := StrToInt(ComboBox1.Text);//********** MODIFY ********** RetCode := ResetLana(LanaNum, 0, 0, lrAlloc); if RetCode <> NRC_GOODRET then begin Beep; ShowMessage('Reset Error! RetCode = $' IntToHex(RetCode, 2)); end;//**************************** New(MACAddress); try if RetCode = NRC_GOODRET then begin edMAC.Caption := Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x', [MACAddress[0], MACAddress[1], MACAddress[2], MACAddress[3], MACAddress[4], MACAddress[5]]); end else begin Beep; edMAC.Caption := 'Error'; ShowMessage('GetMACAddress Error! RetCode = $' IntToHex(RetCode, 2)); end; finally Dispose(MACAddress); end;end;procedure TMainFmt.btnResetMACClick(Sender: TObject);var RetCode: Byte; LanaNum: Byte;begin LanaNum := StrToInt(ComboBox1.Text); RetCode := ResetLana(LanaNum, 0, 0, lrAlloc); if RetCode <> NRC_GOODRET then begin Beep; ShowMessage('Reset Error! RetCode = $' IntToHex(RetCode, 2)); end;end;end.
mathewzhao
中階會員


發表:121
回覆:164
積分:67
註冊:2003-04-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-25 10:40:15 IP:61.150.xxx.xxx 未訂閱
Hi!kensoong您好!   請參考一下:  IP Address--->MAC Address    1)VC版   http://www.pcvc.net/category/content.asp?sendid=229    2)Delphi版 http://users.pandora.be/sonal.nv/ics/faq/General.html#MacaddressofaNIC18    ===================================
Example 2:     const INADDR_NONE = $FFFFFFFF; 
function SendARP( const DestIP : DWord;
                  const SrcIP : DWord;
                  const pMacAddr : Pointer;
                  const PhyAddrLen : PULONG) : DWord; stdcall; external 'IPHLPAPI.DLL' name 'SendARP';    function inet_addr(const cp : PChar) : DWord; stdcall; external 'WS2_32.DLL' name 'inet_addr';    var
dwResult : DWord;
ulIPAddr : DWord;
ulMACAddr : Array [0..5] of Byte;
ulAddrLen : ULONG;    begin
  ulIPAddr := inet_addr(PChar('192.168.1.1'));
  ShowMessage(IntToHex(ulIPAddr,8)); // Ist mal interessant zu sehen
  if ulIPAddr = INADDR_NONE exit;
  ulAddrLen := 6;
  dwResult := SendARP(ulIPAddr,0,@ulMACAddr,@ulAddrLen);
  ShowMessage('dwResult: ' IntToStr(dwResult)); // if 0, then ok
  ShowMessage(IntToHex(ulMACAddr[0],2) ':' 
              IntToHex(ulMACAddr[1],2) ':' 
              IntToHex(ulMACAddr[2],2) ':' 
              IntToHex(ulMACAddr[3],2) ':' 
              IntToHex(ulMACAddr[4],2) ':' 
              IntToHex(ulMACAddr[5],2));
end; 
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-06-07 10:31:57 IP:147.8.xxx.xxx 未訂閱
Hi kensoong, I do not know of any MAC to IP address translation. However you may want to ping the local subnet and look at the arp cache.
Ktop_Robot
站務副站長


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

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


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


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


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

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