[DELPHI] Jak pobrac mac danego IP w sieci.

0

Witam.

Chciałem napisać sobie serwer FTP, tyle że musi mieć opcje sprawdzania numeru MAC gościa który się łączy z serwerem. Bez tej opcji nawet się nie biorę za to.
Pytanie jak pobrać MAC znając IP. Pobrałem 2 przykłady z torry ale one pobierają mój MAC.

THX

0

nie wiem jak zrobic to w delphi, ale musisz przechwycic caly pakiet - tam jest mac nadawcy, mac odbiorcy, ip nadawcy, ip odbiorcy itp...sniffery tak robia i niektore pokazuja te adresy mac :)

0

FAQ...

Kto sie dopisze ten tuli bana :)

PS: n_a_v jak nie wiesz to daruj sobie odpowiedz...

0

Zgadza się Lofix. Dzięki.
Mam tylko małe pytanko. Motam się z tym już pół dnia.
Kod jest taki:

uses 
  NB30; 

type 
  TAdapterStatus = record 
    adapter_address: array [0..5] of char; 
    filler: array [1..4 * SizeOf(char) + 19 * SizeOf(Word) + 3 * SizeOf(DWORD)] of 
    Byte; 
  end; 

  THostInfo = record 
    username: PWideChar; 
    logon_domain: PWideChar; 
    oth_domains: PWideChar; 
    logon_server: PWideChar; 
  end;{record} 


function IsNetConnect: Boolean; 
begin 
  if GetSystemMetrics(SM_NETWORK) and $01 = $01 then Result := True 
  else 
    Result := False; 
end;{function} 

function AdapterToString(Adapter: TAdapterStatus): string; 
begin 
  with Adapter do Result := 
      Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x', 
      [Integer(adapter_address[0]), Integer(adapter_address[1]), 
      Integer(adapter_address[2]), Integer(adapter_address[3]), 
      Integer(adapter_address[4]), Integer(adapter_address[5])]); 
end;{function} 

function GetMacAddresses(const Machine: string; 
  const Addresses: TStrings): Integer; 
const 
  NCBNAMSZ = 16;        // absolute length of a net name 
  MAX_LANA = 254;       // lana's in range 0 to MAX_LANA inclusive 
  NRC_GOODRET = $00;       // good return 
  NCBASTAT = $33;       // NCB ADAPTER STATUS 
  NCBRESET = $32;       // NCB RESET 
  NCBENUM = $37;       // NCB ENUMERATE LANA NUMBERS 
type 
  PNCB = ^TNCB; 
  TNCBPostProc = procedure(P: PNCB); 
  stdcall; 
  TNCB = record 
    ncb_command: Byte; 
    ncb_retcode: Byte; 
    ncb_lsn: Byte; 
    ncb_num: Byte; 
    ncb_buffer: PChar; 
    ncb_length: Word; 
    ncb_callname: array [0..NCBNAMSZ - 1] of char; 
    ncb_name: array [0..NCBNAMSZ - 1] of char; 
    ncb_rto: Byte; 
    ncb_sto: Byte; 
    ncb_post: TNCBPostProc; 
    ncb_lana_num: Byte; 
    ncb_cmd_cplt: Byte; 
    ncb_reserve: array [0..9] of char; 
    ncb_event: THandle; 
  end; 
  PLanaEnum = ^TLanaEnum; 
  TLanaEnum = record 
    Length: Byte; 
    lana: array [0..MAX_LANA] of Byte; 
  end; 
  ASTAT = record 
    adapt: TAdapterStatus; 
    namebuf: array [0..29] of TNameBuffer; 
  end; 
var 
  NCB: TNCB; 
  Enum: TLanaEnum; 
  I: integer; 
  Adapter: ASTAT; 
  MachineName: string; 
begin 
  Result := -1; 
  Addresses.Clear; 
  MachineName := UpperCase(Machine); 
  if MachineName = '' then    MachineName := '*'; 
  FillChar(NCB, SizeOf(NCB), #0); 
  NCB.ncb_command := NCBENUM; 
  NCB.ncb_buffer  := Pointer(@Enum); 
  NCB.ncb_length  := SizeOf(Enum); 
  if Word(NetBios(@NCB)) = NRC_GOODRET then 
  begin 
    Result := Enum.Length; 
    for I := 0 to Ord(Enum.Length) - 1 do 
    begin 
      FillChar(NCB, SizeOf(TNCB), #0); 
      NCB.ncb_command  := NCBRESET; 
      NCB.ncb_lana_num := Enum.lana[I]; 
      if Word(NetBios(@NCB)) = NRC_GOODRET then 
      begin 
        FillChar(NCB, SizeOf(TNCB), #0); 
        NCB.ncb_command  := NCBASTAT; 
        NCB.ncb_lana_num := Enum.lana[i]; 
        StrLCopy(NCB.ncb_callname, PChar(MachineName), NCBNAMSZ); 
        StrPCopy(@NCB.ncb_callname[Length(MachineName)], 
          StringOfChar(' ', NCBNAMSZ - Length(MachineName))); 
        NCB.ncb_buffer := PChar(@Adapter); 
        NCB.ncb_length := SizeOf(Adapter); 
        if Word(NetBios(@NCB)) = NRC_GOODRET then 
          Addresses.Add(AdapterToString(Adapter.adapt)); 
      end; 
    end; 
  end; 
end;{function}

Pytanie to:

Label1.Caption := IntToStr(GetMacAddresses(..., ...));

Co mam wpisać w miejsce kropek??

THX

0
Label1.Caption := IntToStr(GetMacAddresses(..., ...));

Co mam wpisać w miejsce kropek??

THX

bosh

korzystaj czasami z F1, a opłaci się

0

Wciskam te F1 i wciskam i jakoś nic mi to nie pomaga.

Jeżeli u ciebie coś mądrego pokazuje to wklej mi to tu i bedzie po kłopocie.

THX

0

OK. Już zrobiłem, ale wykorzystując plik MACAdress.pas pobrany z Internetu, skąd niepamiętam. jak ktoś jest chętny mogę go wysłać.

PAPA

1 użytkowników online, w tym zalogowanych: 0, gości: 1