![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MAC from IP
Qwertyk © (2005-03-21 22:15:00)Как получить мак адрес по IP?
Alex Konshin (2005-03-22 23:57:00) [1]Хуже - компьютер отключен.
Разница динамические/статические в том, что в случае динIP сам IP вообще не имеет смысла для отключенного компьютера, ведь при каждом включении он получает новый IP. Для статического я еще как-то могу представить ситуацию, что MAC-адрес где-то закешировался и мы его получили хотя компьютер выключен.
Piter (2005-03-22 17:44:00) [2]GLFox © (22.03.05 16:56) [7]
Result
а если NetBios на компьютере отключен?
GLFox (2005-03-22 16:56:00) [3]Я использую такую вот функцию для получения MAC:
function GetHostInfoNB(sHostName:String; iInfoTypes:Integer):String;
var
NCB:TNCB;
i,iLen,iResCode:Integer;
pAStat:^TAStat;
begin
Result:='';
if (sHostName='')or(sHostName=sLocalHostName) then sHostName:='*' else
while (Length(sHostName)>0)and(sHostName[1]='\') do Delete(sHostName,1,1);
FillChar(NCB,SizeOf(NCB),0);
Ncb.ncb_command:=NCBRESET;
Netbios(@NCB);
FillChar(NCB,SizeOf(NCB),0);
Ncb.ncb_command:=NCBASTAT;
Ncb.ncb_lana_num:=0;
New(pAStat);
Ncb.ncb_buffer:=pAStat;
Ncb.ncb_length:=SizeOf(TAStat);
iLen:=Length(sHostName);
for i:=0 to NCBNAMSZ-1 do
if i<iLen then Ncb.ncb_callname[i]:=sHostName[i+1]
else Ncb.ncb_callname[i]:=' ';
iResCode:=Netbios(@NCB);
if iResCode = 0 then begin
if (nbiMACAddr and iInfoTypes) = nbiMACAddr then
with pAStat^.adapt do begin
Result:=Format('%.2x %.2x %.2x %.2x %.2x %.2x',
[adapter_address[0], adapter_address[1], adapter_address[2],
adapter_address[3], adapter_address[4], adapter_address[5]]);
end;
if (nbiGrpName and iInfoTypes) = nbiGrpName then begin
if Result<>'' then Result:=Result+#0;
for i:=0 to pAStat^.adapt.name_count-1 do
if (pAStat^.NameBuff[i].name_flags and GROUP_NAME) = GROUP_NAME then begin
Result:=Result+pAStat^.NameBuff[i].name;
Break;
end;
end;
end else AddEventToLog(etErrorInter,0,'NetBIOS error ('+sHostName+')');
Dispose(pAStat);
где
TAStat=record
adapt : TAdapterStatus;
NameBuff : array[0..29]of TNameBuffer;
end;
Piter (2005-03-22 16:51:00) [4]Alex Konshin © (22.03.05 3:56) [4]
Мне вот и интересно, а будет ли кому на них отвечать, если компьютер выключен?
по-моему, нет
Alex Konshin © (22.03.05 3:56) [4]
Ищи в MSDN в IP Helper API функцию SendARP
верно - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/sendarp.asp
Но это для w2k/XP/2003
Для Win9x можно обратиться к узлу (например, пропинговать) и в ARP таблице искать соответствие IP-MAC (если пинг прошел, оно там должно быть)
Alex Konshin © (22.03.05 4:15) [5]
Спрашивал про статические адреса потому, что ARP кешируются
насколько я помню, не более, чем на минуту другую
Если же еще и адреса динамические, то я вообще не понимаю, о каком IP идет речь
а какая разница - статические или динамические адреса?! Просто в локалкее пытаются определить MAC сетевой карточки по IP адресу. Причем здест статика, динамика?
Alex Konshin (2005-03-22 04:15:00) [5]Да, для тех, кто не понял. Спрашивал про статические адреса потому, что ARP кешируются, поэтому теоретически можно получить MAC того, чего уже нет (выключено). Если же еще и адреса динамические, то я вообще не понимаю, о каком IP идет речь.
Alex Konshin (2005-03-22 03:56:00) [6]А у тебя IP в локалке статические? А то как бы не вышло, что ты определяешь MAC адрес по IP для выключенного компьютера, да еще и не того.
MAC по IP определяется посылкой пакетов ARP. Мне вот и интересно, а будет ли кому на них отвечать, если компьютер выключен? Не, я правда не знаю. Могу и ошибаться.
Попробуй, может, и зря я пугаю. Ищи в MSDN в IP Helper API функцию SendARP, если мне память не изменяет, ну или что-то рядом с ней.
Piter (2005-03-21 23:50:00) [7]а система какая?
Qwertyk (2005-03-21 23:46:00) [8]хмм..
есть программа lanstartcmd, для включения компьютера по локальной стеи. Так вот мне нужно сделать для нее оболочку. Нужно определить МАК адрес компьютера по IP в локальной сети..
Piter (2005-03-21 23:15:00) [9]а зачем?