Форум: "Прочее";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];
ВнизMAC по IP Найти похожие ветки
← →
Alekcey © (2010-07-26 14:21) [0]Как получить MAC по IP компьютера из другой подсети
← →
Leonid Troyanovsky © (2010-07-26 14:26) [1]
> Alekcey © (26.07.10 14:21)
> Как получить MAC по IP компьютера из другой подсети
http://groups.google.com/group/fido7.ru.delphi/msg/8e6974970ac98f5d
--
Regards, LVT.
← →
DVM © (2010-07-26 14:26) [2]между подсетями есть маршрутизаторы?
← →
Alekcey © (2010-07-26 14:34) [3]маршрутизаторы есть
Посоветовали
Вариант раз: склепать NetBios запрос, как это делает команда nbtstat, в ответе будет MAC адрес хоста.
Вариант два: спросить об этом маршрутизатор между сетями, отправив ему по SNMP iso.org.dod.internet.mgmt.mib-2.at.atTable.atEntry и/или iso.org.dod.internet.mgmt.mib-2.ip.ipNetToMediaTable. По полученным таблицам искать соответствие IP-to-MAC.
Но для меня это надолго. ПРимеры есть?
← →
DVM © (2010-07-26 14:40) [4]
> Alekcey © (26.07.10 14:34) [3]
> как это делает команда nbtstat
Это будет работать только если включен NetBIOS over TCP/IP. Т.е не всегда.
> спросить об этом маршрутизатор между сетями
не каждый маршрутизатор тебе ответит
← →
Alekcey © (2010-07-26 14:44) [5]Думаю для меня ближе "как это делает команда nbtstat"
В какую сторону теперь двигаться?
Нашел такое:
procedure TForm1.GetNetBiosNames(const Addr: String);
var
NCB: TNCB;
Enum: TLanaEnum;
NetbiosInfo: TNetbiosInfo;
I, A: Integer;
Ends: Byte;
begin
FillChar(NCB, SizeOf(TNCB), #0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := @Enum;
NCB.ncb_length := SizeOf(TLanaEnum);
if Netbios(@NCB) = Char(NRC_GOODRET) then
for I := 0 to Integer(Enum.length) - 1 do
begin
FillChar(NCB, SizeOf(TNCB), #0);
NCB.ncb_lana_num := Enum.lana[I];
NCB.ncb_command := Char(NCBRESET);
if Netbios(@NCB) = Char(NRC_GOODRET) then
begin
FillChar(NetbiosInfo, SizeOf(TNetbiosInfo), #0);
NCB.ncb_command := Char(NCBASTAT);
Move(Addr[1], NCB.ncb_callname[0], Length(Addr));
NCB.ncb_buffer := @NetbiosInfo;
NCB.ncb_length := SizeOf(TNetbiosInfo);
if Netbios(@NCB) = Char(NRC_GOODRET) then
for A := 0 to NetbiosInfo.AdapterStatus.name_count - 1 do
begin
Ends := Byte(NetbiosInfo.NameBuffer[A].name[NCBNAMSZ - 1]);
NetbiosInfo.NameBuffer[A].name[NCBNAMSZ - 1] := #32;
Memo1.Lines.Add(Format("%s <%s>",
[String(NetbiosInfo.NameBuffer[A].name),
IntToHex(Ends, 2)]));
end;
end;
end;
end;
Работает нормально.
Под MAC переделать можно?
← →
han_malign (2010-07-27 10:45) [6]http://ru.wikipedia.org/wiki/ARP
← →
Alekcey © (2010-07-27 13:02) [7]не пойму, почему дает mac 00-00-00...
У меня IP xx.xx.2.107
Нужен mac компа с ip xx.xx.10.22type
IPAddr = packed record
a1, a2, a3, a4 : Byte;
end;
MacAddr = packed record
a1, a2, a3, a4, a5, a6 : Byte;
end;
function SendARP(DestIP, SrcIP : IPAddr; pMacAddr, PhyAddrLen : Pointer) : DWORD; stdcall; external "Iphlpapi.dll";
implementation
{$R *.dfm}
uses winsock;
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
rad, lad : IPAddr;
len : Dword;
ipstr : String;
mac : MacAddr;
begin
ipstr := "1.2.3.4";
len := 6;
rad := IPAddr(inet_addr(PChar(ipstr)));
ZeroMemory(@lad, SizeOf(IPAddr));
ZeroMemory(@mac, SizeOf(MacAddr));
SendArp(rad, lad, @mac, @len);
showmessage(Format("%.02x-%.02x-%.02x-%.02x-%.02x-%.02x", [mac.a1, mac.a2, mac.a3, mac.a4, mac.a5, mac.a6]));
end;
← →
DVM © (2010-07-27 13:11) [8]
> Alekcey ©
ARP пакеты не проходят через маршрутизаторы
← →
Alekcey © (2010-07-27 13:48) [9]Что делать? Как быть? :)
← →
Anatoly Podgoretsky © (2010-07-27 14:18) [10]Хакеры всего мира мечтаю задосить Интернет послав широковещательный запрос по адресу 255.255.255.255
← →
Alekcey © (2010-07-27 15:07) [11]Мне со своей локалкой бы сначала разобраться :))
Работаю в фирме с локалкой, состоящей из нескольких подсетей. Пишу программу по обнаружению изменений в локальной сети. (смена ip, mac, установка/удаление программ , может ещё что-нибудь).
Идея такая: админ вбивает в программу диапазоны адресов, программа периодически сканит сеть и определяет изменения.
Пинговать за маршрутизатором умею.
Получать имя компа за маршрутизатором умею.
Из реестра( ...\uninstal ) доставать список программ умею.
Остался mac.
Я так понимаю в сети только mac может однозначно определять комп.
В инете есть бесплатные проги, но я хочу свою (хотя-бы частично свою :)) )
← →
Anatoly Podgoretsky © (2010-07-27 15:37) [12]> Alekcey (27.07.2010 15:07:11) [11]
МАС не может, это самое ненадежное.
← →
Alekcey © (2010-07-27 15:44) [13]Ну если так, то возникает другая задача: как однозначно определить, что под ip xx.xx.xx.xx сегодня тот-же комп,что и вчера?
← →
DVM © (2010-07-27 16:18) [14]
> Alekcey © (27.07.10 15:44) [13]
> как однозначно определить, что под ip xx.xx.xx.xx сегодня
> тот-же комп,что и вчера?
Очевидно путем установки на каждый компьютер программы собирающей и отсылающей данные в центр.
← →
miek (2010-07-27 18:56) [15]>Пишу программу по обнаружению изменений в локальной сети
Если ты - админ сети, то ты и так об этом знаешь. Вбивай сам все изменения. Если ты - "хрен с горы" (не обижайся), то какого тебе париться об этих изменениях? Пингуй те компы, которые нужны для работы твоей проги, и все.
← →
Leonid Troyanovsky © (2010-07-27 18:58) [16]
> Alekcey © (27.07.10 15:07) [11]
> Идея такая: админ вбивает в программу диапазоны адресов,
> программа периодически сканит сеть и определяет изменения.
- Да что тут предлагать?.. А то пишут, пишут...
Конгресс, немцы какие-то... Голова пухнет.
Взять все, да и поделить...
--
Regards, LVT.
← →
Pavia © (2010-07-27 19:05) [17]Зачем что-то ставить когда есть виндовс? Сделать один или не один сервер а остальные компьютерами сделать членами домена виндоус. В AD есть много всего. Главное все правильно настроить.
По поводу ARP.
> ARP пакеты не проходят через маршрутизаторы<Цитата>
>
>
> Alekcey © (27.07.10 13:48) [9]
> Что делать? Как быть? :)
Настроить маршрутизаторы что бы проходили. Хотя это уменьшит безопасность.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2010.11.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c