Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

MAC адрес   Найти похожие ветки 

 
MeMO   (2004-08-29 22:13) [0]

Люди, подскажите как определить MAC удаленного компа. Мне сказали что это делается зерез NetBios() только я с ней разобраться немогу.


 
VID ©   (2004-08-30 00:56) [1]

хошь пример на С++ ?
http://www.sources.ru/cpp/faqs/1.htm

может кто-нибудь тебе портирует код на дельфи, лично я С++ не знаю, а вообще ya.ru рулит ;)


 
Verg ©   (2004-08-30 00:57) [2]


> Люди, подскажите как определить MAC удаленного компа.


Из каких исходных данных? Что известно про "удаленный комп", кроме того, что он "удаленный"?


 
Verg ©   (2004-08-30 01:23) [3]

Цитата оттуда:
"Технология следующая: мы посыалем хосту любой IP-пакет, например по UDP. Система обязательно широковещательным ARP-пакетом запросит его MAC-адрес и если получит, занесёт его в таблицу IPMAC. Откуда мы его и заберём."

Все верно, но...

Тут надо поправить, на мой взгляд:
".... и, когда (и если) получит, занесёт..."

А вот "когда" (через какое время) - этот вопрос как-то ускользнул от составителя того кода.

Другими словами, сколько пройдет времени с момента (по тому коду)
с момента   sendto
до момента GetIpNetTable ?

И хватит ли этого времени, чтобы системе отправить в сеть ARP запрос и получить ARP ответ?


 
Verg ©   (2004-08-30 01:28) [4]

А вообще-то существует ф-ция SendARP (iphlpip.dll)

function SendARP(DestIP:DWORD;SrcIP:DWORD; var pMacAddr; var PhyAddrLen:DWORD):DWORD;stdcall;

implementation

function   SendARP;          external "IPHLPAPI.DLL";


 
Дмитрий Ботвин   (2004-08-30 09:10) [5]

Вот лови код:

//Преобразование Mac-адреса к превычному виду
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;

//Получение MAC-адреса по имени компа
function GetMacAddresses(Machine: string): String;
 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;
   Adapter: ASTAT;
   MachineName: string;
 begin
   Result := "";
   MachineName := UpperCase(Machine);
   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
        FillChar(NCB, SizeOf(TNCB), #0);
        NCB.ncb_command  := NCBRESET;
        NCB.ncb_lana_num := Enum.lana[0];
        if Word(NetBios(@NCB)) = NRC_GOODRET then
           begin
             FillChar(NCB, SizeOf(TNCB), #0);
             NCB.ncb_command  := NCBASTAT;
             NCB.ncb_lana_num := Enum.lana[0];
             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 Result:=AdapterToString(Adapter.adapt);
           end;
      end;
 end;


 
Piter ©   (2004-08-30 15:39) [6]

Verg ©   (30.08.04 1:23) [3]
Другими словами, сколько пройдет времени с момента (по тому коду)


можно пингануть. Если пинг вернется - значит MAC адрес уже точно в кеше



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.05 c
14-1097848974
Kerk
2004-10-15 18:02
2004.11.07
Странные вещи снятся


14-1097734826
AndB
2004-10-14 10:20
2004.11.07
Cache – мнения есть?


14-1098428505
}|{yk
2004-10-22 11:01
2004.11.07
Украинское проклятье Брюгге


14-1098094155
TUser
2004-10-18 14:09
2004.11.07
Дот НЕТ


9-1089041642
Micke
2004-07-05 19:34
2004.11.07
Split Screen с DelphiX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский