Jump to content

    
Sign in to follow this  
Fox_Sanchez

Динамический IP на устройстве

Recommended Posts

Добрый день!

В общем делаю я некое устройство с управлением через Ethernet. Подумалось мне, что будет гораздо удобнее сделать ему присвоение адреса по DHCP, чем зашивать его в явном виде и где-то на наклейке писать. Юзеры глупые, бумажку потеряют, программное с другой машины с другими настройками перетащут и будет мне головная боль. Другое дело когда все автоматическое :rolleyes:

 

Так вот вопрос: как машине найти железку, не зная под каким адресом она запустилась? Машина тоже получает адрес от сервера и железка аналогично его не знает.

Есть всякие роутеры, так-же получающие адрес, но есть к ним фирменные программки, которые их каким-то волшебным образом находят. Как же это работает? Там явно не перебор адресов, все гораздо быстрее.

Share this post


Link to post
Share on other sites

2 -= Александр =-

просто запускаете стандартный isc-dhcp-server на машине, который раздаёт IP -> на железяке обычный DHCP client. Или вам надо выдавать как то специфически IP для ваших железяк ?

Share this post


Link to post
Share on other sites
Там явно не перебор адресов...

Broadcast запросы в локальной сети еще никто не отменял. Вот так все просто.

 

 

просто запускаете стандартный isc-dhcp-server на машине, который раздаёт IP -> на железяке обычный DHCP client.

Але гараж! Кто из них скажет любой другой машине на неведомом адресе какой адрес был выдан конкретной железке?

Share this post


Link to post
Share on other sites
2 -= Александр =-

просто запускаете стандартный isc-dhcp-server на машине, который раздаёт IP -> на железяке обычный DHCP client. Или

Видимо ситуация такая: в сети имеется dhcp сервер к которому нет доступа. Сервер выдает какой то ip железке, на железке индикатора чтобы посмотреть выданный ip нету. Задача: на писюке обнаружить железку. Предполагаем что ip ей выдан и пакеты проходят.

Усложнение: железка в другом сегменте, доступ проброшен через роутер.

Share this post


Link to post
Share on other sites

Да, действительно, я и забыл что так можно)

Broadcast делается на уровне IP или где-то глубже?

 

Про роутеры пока не думаем, все в одном сегменте работает.

Share this post


Link to post
Share on other sites
Broadcast делается на уровне IP или где-то глубже?

По желанию - есть и IP и MAC broadcast. Судя по этому Вашему вопросу, Вам надо с UDP/IP работать, поскольку явно взяли какой то готовый IP стек и испытываете уверенность что всегда будет существовать DHCP сервер.

 

Share this post


Link to post
Share on other sites

гуглите в направлении "групповой 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-домене, т.е. понятное дело через маршрутизаторы это всё не пролезет.

Share this post


Link to post
Share on other sites

Пасибо за ответы, пойду учить матчасть. Пока-что считается что DHCP есть и все в одном сегменте. Остальное может будет, но позже.

Share this post


Link to post
Share on other sites

Можно попробовать сделать так, пропинговать диапазон адресов, а потом командой "arp -a" посмотреть и найти нужный mac адрес устройства и привязанный к нему ip адрес.

Share this post


Link to post
Share on other sites
пропинговать диапазон адресов

 

Некрасиво. Да и фиг знает на какой диапазон DHCP настроено, может там вся подсеть вообще и сканировать долго будет.

Share this post


Link to post
Share on other sites
У вас сеть выше класса 1С?

 

Даже если ниже - всяко секунд 10 пинговать придется, а то и больше. И так при каждом запуске.

Share this post


Link to post
Share on other sites
Пасибо за ответы, пойду учить матчасть. Пока-что считается что DHCP есть и все в одном сегменте. Остальное может будет, но позже.

Почему-то никто не вспомнил про DynDNS - поможет в случае разных подсетей, да и вообще совсем разных сетей.

А если Вам нужно узнать IP-адрес, а MAC известен, то поможет RARP (это протокол обратный ARP).

А если известно NETBIOS-имя устройства/компа, то поможет преобразовать его в IP протокол WINS.

Share this post


Link to post
Share on other sites
Почему-то никто не вспомнил про DynDNS - поможет в случае разных подсетей, да и вообще совсем разных сетей.

Никакого отношения к собственно задаче найти свою железку не имеет.

А если Вам нужно узнать IP-адрес, а MAC известен, то поможет RARP (это протокол обратный ARP).

Ага, и заставить пользователя вбивать и запоминать еще больше цифр. Плюс надо поднять этот протокол.

А если известно NETBIOS-имя устройства/компа, то поможет преобразовать его в IP протокол WINS.

Осталось его поднять на железке, да и на компьютере тоже разрешить, ибо уже в 90x netbios вышел из употребения де факто.

 

Все ведь просто - посылается broadcast UDP запрос на порт предназначенный для целей идентификации у железки. Железка видит, что запрос именно ее, а не вообще что-то чужое и радостно узнает из него IP адрес компьютера и сообщает на него о своем существовании.

Всего делов на полчаса.

Share this post


Link to post
Share on other sites
Никакого отношения к собственно задаче найти свою железку не имеет.

Железке присваиваем уникальное символьное имя. При включении железка по DHCP получает IP и регистрирует его на DynDNS для вышеозначенного символьного имени. Далее - любой клиент может разресольвить это символьное имя в её IP.

Что не так?

 

Ага, и заставить пользователя вбивать и запоминать еще больше цифр. Плюс надо поднять этот протокол

Вы о чём?? Что вбивать и что запоминать?

У железки однозначно есть какой-то MAC. И естественно пользователь на компе должен его знать. Но в этом же нет проблем?

Он же не меняется. А меняется IP, который и нужно узнать.

Вот RARP - он как раз для этого.

А поднимать всё равно что-то придётся. Но лучше поднимать стандартный протокол, а не самопал, чтобы не получить потом люлей от админа. :rolleyes:

 

Осталось его поднять на железке, да и на компьютере тоже разрешить, ибо уже в 90x netbios вышел из употребения де факто.

Да ладно! И сетевыми папками Вы с 90-х не пользовались и сетевым принтером тоже и т.п.? Я Вам сочувствую :biggrin:

 

Все ведь просто - посылается broadcast UDP запрос на порт предназначенный для целей идентификации у железки. Железка видит, что запрос именно ее, а не вообще что-то чужое и радостно узнает из него IP адрес компьютера и сообщает на него о своем существовании.

Это "просто" до первого конфликта по портам с другой такой-же железкой, сляпанной таким же умельцем :biggrin:

А чтобы этого избежать, надо будет дать возможность пользователю изменить этот порт - и опять же придётся ему "вбивать и запоминать еще больше цифр" :laughing:

Да и как быть за пределами подсети?

 

Имхо - следует максимально возможно использовать стандартные протоколы, а не лепить самопал.

И даже в этом случае - прежде чем его лепить, нужно изучить все возможности стандартных протоколов и если их почему-то не хватает - только в этом случае ваять своё.

Лепить свой велосипед в обход всех стандартов и не зная их - это пионэрский подход, странно слышать от Вас призывы к этому.

Ну если конечно эта железка делается только для себя и не пойдёт ни к кому. Но тогда не проблема и просто в своём роутере прописать фиксированную аренду постоянного IP для этой железки и не маяться. Может ТСу так и сделать? Он в курсе такой возможности? :rolleyes:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this