Fox_Sanchez 0 Posted April 12, 2017 · Report post Добрый день! В общем делаю я некое устройство с управлением через Ethernet. Подумалось мне, что будет гораздо удобнее сделать ему присвоение адреса по DHCP, чем зашивать его в явном виде и где-то на наклейке писать. Юзеры глупые, бумажку потеряют, программное с другой машины с другими настройками перетащут и будет мне головная боль. Другое дело когда все автоматическое :rolleyes: Так вот вопрос: как машине найти железку, не зная под каким адресом она запустилась? Машина тоже получает адрес от сервера и железка аналогично его не знает. Есть всякие роутеры, так-же получающие адрес, но есть к ним фирменные программки, которые их каким-то волшебным образом находят. Как же это работает? Там явно не перебор адресов, все гораздо быстрее. Quote Ответить с цитированием Share this post Link to post Share on other sites
Kuzmi4 0 Posted April 12, 2017 · Report post 2 -= Александр =- просто запускаете стандартный isc-dhcp-server на машине, который раздаёт IP -> на железяке обычный DHCP client. Или вам надо выдавать как то специфически IP для ваших железяк ? Quote Ответить с цитированием Share this post Link to post Share on other sites
zltigo 0 Posted April 12, 2017 · Report post Там явно не перебор адресов... Broadcast запросы в локальной сети еще никто не отменял. Вот так все просто. просто запускаете стандартный isc-dhcp-server на машине, который раздаёт IP -> на железяке обычный DHCP client. Але гараж! Кто из них скажет любой другой машине на неведомом адресе какой адрес был выдан конкретной железке? Quote Ответить с цитированием Share this post Link to post Share on other sites
_3m 0 Posted April 12, 2017 · Report post 2 -= Александр =- просто запускаете стандартный isc-dhcp-server на машине, который раздаёт IP -> на железяке обычный DHCP client. Или Видимо ситуация такая: в сети имеется dhcp сервер к которому нет доступа. Сервер выдает какой то ip железке, на железке индикатора чтобы посмотреть выданный ip нету. Задача: на писюке обнаружить железку. Предполагаем что ip ей выдан и пакеты проходят. Усложнение: железка в другом сегменте, доступ проброшен через роутер. Quote Ответить с цитированием Share this post Link to post Share on other sites
Fox_Sanchez 0 Posted April 12, 2017 · Report post Да, действительно, я и забыл что так можно) Broadcast делается на уровне IP или где-то глубже? Про роутеры пока не думаем, все в одном сегменте работает. Quote Ответить с цитированием Share this post Link to post Share on other sites
zltigo 0 Posted April 12, 2017 · Report post Broadcast делается на уровне IP или где-то глубже? По желанию - есть и IP и MAC broadcast. Судя по этому Вашему вопросу, Вам надо с UDP/IP работать, поскольку явно взяли какой то готовый IP стек и испытываете уверенность что всегда будет существовать DHCP сервер. Quote Ответить с цитированием Share this post Link to post Share on other sites
krux 0 Posted April 12, 2017 · Report post гуглите в направлении "групповой MAC-адрес". представьте себе 10 ваших устройств, воткнутых в один коммутатор, и комп. у каждого вашего устройства два MAC-адреса: есть свой уникальный MAC-адрес и общий для всех ваших устройств одного типа групповой MAC-адрес. на уникальный MAC устройство реагирует нормальным образом, реализуя всю обычную логику протокола ARP. при получении пакета на групповой MAC-адрес, ваше устройство формирует специальный UDP пакет вашего формата, протокол вашей разработки. на компе запускаете UDP-сокет на прием и RAW-сокет на передачу. при помощи RAW-сокета формируете специальный ARP-запрос с групповым MAC-адресом. все 10 ваших устройств его получают, но ответ на него формируют с использованием своих индивидуальных MAC-адресов (и полученных по DHCP IP-адресов) и в адрес IP-адреса компа, с которого вы посылали групповой ARP-запрос. т.е. на ваш комп на открытый UDP-сокет должны прилететь 10 пакетов с их MAC и их IP. данное решение работает в одном broadcast-домене, т.е. понятное дело через маршрутизаторы это всё не пролезет. Quote Ответить с цитированием Share this post Link to post Share on other sites
Fox_Sanchez 0 Posted April 12, 2017 · Report post Пасибо за ответы, пойду учить матчасть. Пока-что считается что DHCP есть и все в одном сегменте. Остальное может будет, но позже. Quote Ответить с цитированием Share this post Link to post Share on other sites
Lagman 0 Posted April 12, 2017 · Report post Можно попробовать сделать так, пропинговать диапазон адресов, а потом командой "arp -a" посмотреть и найти нужный mac адрес устройства и привязанный к нему ip адрес. Quote Ответить с цитированием Share this post Link to post Share on other sites
Fox_Sanchez 0 Posted April 12, 2017 · Report post пропинговать диапазон адресов Некрасиво. Да и фиг знает на какой диапазон DHCP настроено, может там вся подсеть вообще и сканировать долго будет. Quote Ответить с цитированием Share this post Link to post Share on other sites
Lagman 0 Posted April 12, 2017 · Report post У вас сеть выше класса 1С? Quote Ответить с цитированием Share this post Link to post Share on other sites
Fox_Sanchez 0 Posted April 12, 2017 · Report post У вас сеть выше класса 1С? Даже если ниже - всяко секунд 10 пинговать придется, а то и больше. И так при каждом запуске. Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted April 12, 2017 · Report post Пасибо за ответы, пойду учить матчасть. Пока-что считается что DHCP есть и все в одном сегменте. Остальное может будет, но позже. Почему-то никто не вспомнил про DynDNS - поможет в случае разных подсетей, да и вообще совсем разных сетей. А если Вам нужно узнать IP-адрес, а MAC известен, то поможет RARP (это протокол обратный ARP). А если известно NETBIOS-имя устройства/компа, то поможет преобразовать его в IP протокол WINS. Quote Ответить с цитированием Share this post Link to post Share on other sites
zltigo 0 Posted April 12, 2017 · Report post Почему-то никто не вспомнил про DynDNS - поможет в случае разных подсетей, да и вообще совсем разных сетей. Никакого отношения к собственно задаче найти свою железку не имеет. А если Вам нужно узнать IP-адрес, а MAC известен, то поможет RARP (это протокол обратный ARP). Ага, и заставить пользователя вбивать и запоминать еще больше цифр. Плюс надо поднять этот протокол. А если известно NETBIOS-имя устройства/компа, то поможет преобразовать его в IP протокол WINS. Осталось его поднять на железке, да и на компьютере тоже разрешить, ибо уже в 90x netbios вышел из употребения де факто. Все ведь просто - посылается broadcast UDP запрос на порт предназначенный для целей идентификации у железки. Железка видит, что запрос именно ее, а не вообще что-то чужое и радостно узнает из него IP адрес компьютера и сообщает на него о своем существовании. Всего делов на полчаса. Quote Ответить с цитированием Share this post Link to post Share on other sites
jcxz 0 Posted April 12, 2017 · Report post Никакого отношения к собственно задаче найти свою железку не имеет. Железке присваиваем уникальное символьное имя. При включении железка по DHCP получает IP и регистрирует его на DynDNS для вышеозначенного символьного имени. Далее - любой клиент может разресольвить это символьное имя в её IP. Что не так? Ага, и заставить пользователя вбивать и запоминать еще больше цифр. Плюс надо поднять этот протокол Вы о чём?? Что вбивать и что запоминать? У железки однозначно есть какой-то MAC. И естественно пользователь на компе должен его знать. Но в этом же нет проблем? Он же не меняется. А меняется IP, который и нужно узнать. Вот RARP - он как раз для этого. А поднимать всё равно что-то придётся. Но лучше поднимать стандартный протокол, а не самопал, чтобы не получить потом люлей от админа. :rolleyes: Осталось его поднять на железке, да и на компьютере тоже разрешить, ибо уже в 90x netbios вышел из употребения де факто. Да ладно! И сетевыми папками Вы с 90-х не пользовались и сетевым принтером тоже и т.п.? Я Вам сочувствую Все ведь просто - посылается broadcast UDP запрос на порт предназначенный для целей идентификации у железки. Железка видит, что запрос именно ее, а не вообще что-то чужое и радостно узнает из него IP адрес компьютера и сообщает на него о своем существовании. Это "просто" до первого конфликта по портам с другой такой-же железкой, сляпанной таким же умельцем А чтобы этого избежать, надо будет дать возможность пользователю изменить этот порт - и опять же придётся ему "вбивать и запоминать еще больше цифр" :laughing: Да и как быть за пределами подсети? Имхо - следует максимально возможно использовать стандартные протоколы, а не лепить самопал. И даже в этом случае - прежде чем его лепить, нужно изучить все возможности стандартных протоколов и если их почему-то не хватает - только в этом случае ваять своё. Лепить свой велосипед в обход всех стандартов и не зная их - это пионэрский подход, странно слышать от Вас призывы к этому. Ну если конечно эта железка делается только для себя и не пойдёт ни к кому. Но тогда не проблема и просто в своём роутере прописать фиксированную аренду постоянного IP для этой железки и не маяться. Может ТСу так и сделать? Он в курсе такой возможности? :rolleyes: Quote Ответить с цитированием Share this post Link to post Share on other sites