LINUX.ORG.RU
ФорумAdmin

Какие есть способы, чтобы устройство сообщало «я здесь»?

 , ,


1

1

Играюсь с разными одноплатниками, обычно их ищу в сети с помощью nmap. Не всегда есть такая возможность, например, когда пришёл в гости, чужой компьютер без nmap или ещё хуже – оффтопик.

Заметил, что vlc, например, умеет «видеть» в локальной сети smb шары. А также есть протокол SAP (опять же vlc его умеет). На бумаге выглядит красиво для случаев если одноплатник с камерой, а по факту как-то очень криво работает.

Как ещё устройства могут сообщать о себе? Интересуют наиболее минималистичные варианты.

P.s. устройства должны сообщать о себе в локальной сети.



Последнее исправление: Jullyfish (всего исправлений: 1)

например, когда пришёл в гости

с одноплатником? и его надо найти??

можт этаа… лудше бабу, м?…

по теме: мало данных. искать-то тебе в локалке (mDNS) или во всем интернете (DNS)?

aol ★★★★★
()
Последнее исправление: aol (всего исправлений: 2)
Ответ на: комментарий от Bad_ptr

mDNS

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

Jullyfish
() автор топика
Ответ на: комментарий от gagarin0

Да, этот вариант довольно хороший, как-то о таком не подумал. Благодарю! Пример кривоват, но задумка ясна.

Jullyfish
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Задай в роутере по MAC статические адреса для всех.

У меня дома примерно так и сделано.

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

Да. Впрочем в любом другом варианте тебе точно также будет что-то нужно, что будет определять. Вопрос в распространёности. По умолчанию lldp может быть активным мало где. Проще наверное отклики веб-морд искать. Или сразу через nmap сканировать какой-то набор портов.

imul ★★★★★
()
Ответ на: комментарий от imul

Проще наверное отклики веб-морд искать.

Тут веб-морд особо и нигде и нет.

через nmap сканировать какой-то набор портов.

Мне лично это удобно. Но как показывает практика, nmap не всегда бывает «под рукой».

Но вот вариант с nc мне, в общем нравится.

Jullyfish
() автор топика
Ответ на: комментарий от gagarin0

А не проще ему статический адрес приколотить, и на пузе его же написать маркером?

thesis ★★★★★
()

Самым лёгким будет свой протокол. Для локальной сети, тебе надо отправлять heartbeat периодически. Сам heartbeat это udp широковещательный пакет (роутер сам разошлёт его на все устройства в рамках сети). Если надо чтоб во всём инете было видно, то нужен уже сервер и отправлять туда tcp пакет. В пакет какое-то содержимое вложи, например, «ping». А дальше ты просто слушаешь нужный порт и видишь как только устройство начинает слать heartbeat, чтоб автоматически подключиться к нему, т.к. ip ты уже можешь узнать спокойно.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Jullyfish

upnp

Это для другого. upnp чтоб порты на роутере открывать и сеть автоматически настраивать (при этом по факту безопасность убивается в 0 если что-то наружу из домашней сети лезет). В рамках одного сегмента ты и так обычно видишь все устройства.

ЗЫ

Ещё не путай это с техникой пробивания NAT

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)

обычно их ищу в сети с помощью nmap

если они получают конфигурацию по DHCP, то я решал подобную проблему при помощи DHCP + DNS свзяки, при получении IP адреса, DHCP обноляет DNS зону и условно твоя железка всегда отзыается по dns имени sbm.localdomain

gagarin0
()
Ответ на: комментарий от peregrine

Самым лёгким будет свой протокол.

Я попробовал реализовать SAP протокол. Я думал он просто рассылает широковещательно текст в формате SDP протокола, но оказалось, что там нужен ещё 32-битный header (вроде \040\000\000\000\000\000\000\000 достаточно, как показала практика). Изначально я слал сообщение на широковещательный адрес, который указан у интерфейса (192.168.0.255 в моей подсети), но такие сообщения vlc и ffplay не видят. А вот если слать на адрес 224.2.127.254, то vlc и ffplay уже реагируют.

В общем, это дело можно переделать просто в свой heartbeat. :^)

Jullyfish
() автор топика
Ответ на: комментарий от gagarin0

если они получают конфигурацию по DHCP

Так и есть.

я решал подобную проблему при помощи DHCP + DNS свзяки, при получении IP адреса

Для этого нужно что-то дополнительно делать на маршрутизаторе?

Jullyfish
() автор топика
Ответ на: комментарий от Jullyfish

SAP протокол

Излишен, если надо проще всего. Единственное думай, сколько у тебя устройств в сети. Потому что если у тебя 100500 устройств и они пиликают несколько раз в секунду, отправляя с пиликом своё имя в читаемом виде, то вай-ваю может поплохеть как в плане ширины канала (пилики всё забьют) так и в плане нагрузки (предположим что у тебя там торренты качаются-раздаются на говнороутере где ещё средства улучшения интернета пыхтят, всё и так на ладан дышит, а тут ты такой с 100500 heartbeat заваливаешься).

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от gagarin0

Это хорошее решение, если нет нужды активно следить за их доступностью (не отвалилось ли чего и не ушло ли в ребуты). Если условия задачи позволяют и возможности, то я бы на нём и остановился (т.к. никакой мусор по сети не гуляет, условно получил имя и спи спокойно, пока тебя не дёрнут).

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от Jullyfish

Для этого нужно что-то дополнительно делать на маршрутизаторе?

да, не обязательно на маршрутизаторе, а там где запущен DHCP сервер

если openwrt: https://openwrt.org/docs/guide-user/base-system/dhcp.dnsmasq

связка isc-dhcp4 + bind9 (которая у меня работала раньше): https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcpdconf

связка kea4-dhcp + bind9 (на которую я перешел): https://www.techtutorials.tv/sections/linux/how-to-setup-ddns-using-kea-and-bind/

в вашем случае я бы просто сделал в DHCP прописал правила для MAC адресов, чтобы они получали «статические» ip адреса и не морочил голову

gagarin0
()
Ответ на: комментарий от peregrine

а тут ты такой с 100500 heartbeat

Так первый делом добавляю в цикл sleep(1). По моему никто не задохнётся от одного пакета в секунду. Или я ошибаюсь?

Jullyfish
() автор топика

Как ещё устройства могут сообщать о себе?

Вариант открытки с музыкой к девайсу прилепить.

anc ★★★★★
()
Ответ на: комментарий от aol

например, когда пришёл в гости

с одноплатником? и его надо найти??

Случай два дня назад у меня: живу в деревне, приехала соседка-дачница, попросила у меня «интернет». Отнес ей «устаревший» Raspebbry Pi с OpenWrt и с подключенным радиомодемом huawei e3372 и антенной, вставил симку, включил, а IP-адрес не помню. И нет, он не 192.168.0.1. У соседки ноутбук только с виндами. Пришлось подключать свой и искать через nmap. Оказалось что dnsmasq был недонастроен и не выдывал адреса. Нашел, настроил, соседка довольна, яблочным пирогом угостила.

можт этаа… лудше бабу, м?…

В деревне они такого возраста и комплекции что лучше бы не надо:)

искать-то тебе в локалке

В локалке. Причем если одноплатник принесли из другой локалки то поиск может быть усложнен тем что там было к примеру 192.168.0.Х, а тут 192.168.1.Х или еще что-нибудь. Так что предложенная выше идея вещать что-нибудь на 255.255.255.255 кажется хорошей. Особенно если ее как-то автоматизировать чтобы включенны одноплатник сразу начинал вещать раз в N секунд.

watchcat382 ★★
()
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от watchcat382

Большое спасибо за наглядный пример!

У соседки ноутбук только с виндами.

А там есть какой-нибудь штатный инструмент, чтобы порт послушать? Как я помню nc там по умолчанию нет.

Jullyfish
() автор топика

Эту задачу давно решили в ipv6, вот прям конкретно эту вот, через link-local. То если ты, или тот к кому ты пришел в гости, не поехавший извращенец выпиливающий ipv6 отовсюду - то все ок. Если ты таки такой - ССЗБ

По сути в IPv6 встроенный коннект по MAC. То есть когда ты выткаешся в локалку, можно

  • пингануть ping6 ff02::1%eth0 (eth0 - eth который в локалке) - ответят все ipv6 хосты локалки, ответят через свой link-local естественно. Дальше смотришь что ответило и по этому адресу заходишь по ssh, придется делать небольшой перебор, в тч по known host, если есть.
  • перевести MAC адрес твоей малины в link-local формат и запомнить. Тогда просто коннектишся по ssh - ssh MY_LINK_LOCAL%eth0 .

Естественно никаких dhcp и прочего не надо.

anonymous
()
Ответ на: комментарий от Jullyfish

Я не спец по виндам и крайне мало имел с ними дело примерно после XP так что про наличие виндовых инструментов сетевой диагностики ничего сказать не могу.

watchcat382 ★★
()
Ответ на: комментарий от anonymous

Эту задачу давно решили в ipv6, вот прям конкретно эту вот, через link-local

Однозначно, самое простое решение.

anonymous
()
Ответ на: комментарий от anonymous

пингануть ping6 ff02::1%eth0

Попробовал, есть какие-то флуктуации.

Сначала я сделал это на своей основной машинке (Fedora). Отвечала только сама пингующая машина.

Сделал тоже самое под OpenBSD. Тут уже все (вроде) откликнулись.

Jullyfish
() автор топика
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария