Здравствуйте toypaul, Вы писали:
T>А как послать пакет?
Сокеты. Создаёшь UDP сокет и вперёд... Инфы по этому полно.
Т>У тебя есть рабочий исходник, в котором есть все?
С собой нет. Если найду, принесу. Давно такое писалось....
T>И еще — если мне нужен MAC не шлюза, а именно хоста, то как быть?
Хм. IMHO никак. Это др. подсеть и по идее шлюз для того и стоит что бы их разделять. На физическом уровне ты шлёш пакет на МАС шлюза с указанием IP из др. подсети. У шлюза имеется своя таблица IP<->МАС плюс табл. маршрутизации. В соотв. с этим он и отправляет твой пакет дальше по другому МАС, даже не зная, оконечный там хост или ещё один маршрутизатор.
Простейшая проверка технологии из консоли:
1. Делаешь ping HOST_IP
2. Делаешь arp -a
и наблюдаешь HOST_IP HOST_MAC (или GATEWAY_MAC :) )
Кстати техника определения абсолютно не зависит от открытости/установлености NetBIOS.
И абсолютно неважно, примет ли удалённый хост твой пакет или проигнорирует его. Для того что бы убедится в этом проделай примерно следующую последовательность:
1. arp -d HOST_IP удаляем из таблицы, если запись там случайно осталась.
2. telnet
3. open HOST_IP
4. получаем Could not open a connection to host: Connect failed. Это потому, что там порт такой вообще закрыт и соединение невозможно в принципе. НО! Нам важно что пакет был ОТОСЛАН!
5. arp -a и видим HOST_IP HOST_MAC Так вот.
Локальная таблица со временем устаревает (от 1 до 30 мин) потому забирать надо сразу.