Главная страница
    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.049 c
1-1098779002
Brooks Seth
2004-10-26 12:23
2004.11.07
Млин...


14-1098102160
}|{yk
2004-10-18 16:22
2004.11.07
Кто смотрел Космическу одиссею 2001 или читал Кларка


14-1098014046
Comp
2004-10-17 15:54
2004.11.07
Синхронизация времени с интернетом


14-1098191680
ZEX
2004-10-19 17:14
2004.11.07
требуются программисты


6-1093288647
Alaman
2004-08-23 23:17
2004.11.07
Как скачать файл из интернета по HTTP?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский