Рейтинг:2

Как написать инструмент обнаружения устройств с помощью Bash

флаг ng

У меня есть встроенный ПК с Linux-сервером и простой веб-сервер, который используется в сельском хозяйстве. Мои клиенты покупают эти ПК и используют их на своих полях. (они устанавливаются на столбе на высоте 6 или 7 метров над уровнем земли, и доступ к нему очень затруднен) иногда они меняют диапазон IP-адресов этих компьютеров с исходного на желаемый диапазон IP-адресов. например, я отправляю им 192.168.10.10/24, но они могут изменить его на что-то вроде 172.16.12.19/29 или 10.10.200.10/8 или ....

проблема в том, что через некоторое время они забывают IP-адрес ПК, и мы хотим дать им инструмент для обнаружения и отображения текущего IP-адреса.

Я подумал, что, возможно, использование широковещательного IP-адреса и отправка сообщения по локальной сети могут помочь решить эту проблему. но после некоторых поисков я понял, что мне нужно знать диапазон хотя бы например (172.16.12.X или 10.10.200.X), что для меня невозможно, потому что фермеры тоже забыли диапазон сети. Есть ли какой-нибудь инструмент, такой как «NC» в Linux, который может помочь мне написать сценарий bash, чтобы найти их IP? У меня есть сетевой доступ к ПК, но я не могу подключить монитор к ПК, поэтому единственный способ — найти IP-адрес с помощью локальной сети.

Я хочу что-то вроде этого:

echo "Какой у вас IP-адрес?" | нк -w1 -у 4545

и я поставил что-то на ПК, который отвечает на это сообщение всякий раз, когда они получают точную фразу Какой у вас IP-адрес? "

нк -л -у -п 4545

но для nc я должен указать диапазон сети, что для меня невозможно.

Редактировать:

если вы работали с инструментом обнаружения устройств (DDT) для IP-камер, вы знаете, что они найдут IP-адрес камеры независимо от ПК, на котором установлен DDT. Я хочу что-то точно такое же, но с командами bash.

CrazyTux avatar
флаг us
Подключены ли эти ПК к Интернету? Или они все в одном локальном лане? Кроме того, после того, как они забыли ip и диапазон ip, у них есть доступ к серверам через оболочку?
флаг ng
@CrazyTux они подключены только к локальной сети, после того, как забыли IP-адрес, у них нет доступа к оболочке
CrazyTux avatar
флаг us
Есть ли сервер, к которому имеют доступ все остальные серверы или cpstumers? Или на серверах есть служба smtp? Думаю, у меня есть решение, давайте пообщаемся.
флаг ng
@CrazyTux no Эти клиенты не имеют доступа друг к другу, эти ПК являются частными для каждого клиента и имеют свою собственную конфигурацию. к сожалению у них нет smtp сервера,
CrazyTux avatar
флаг us
Итак, скажем, мы создаем инструмент обнаружения устройств, если они не будут его использовать и забудут свой IP-адрес, потеряют ли они доступ к своему компьютеру? или они могли это как-то связать? если они потеряют доступ к компьютеру, инструмент должен каким-то образом отправить сообщение с текущим IP-адресом на какое-то другое устройство, если у них все еще есть доступ к серверу после того, как они забыли свой IP-адрес, тогда они могут просто проверить это с помощью `ifconfig ` это правильно или я что-то упустил?
sudodus avatar
флаг jp
Можно ли, не лазая по столбам, сбросить на "заводские настройки" те устройства, которые есть у вас в записях? Если нет, я думаю, это поможет, если вам удастся сделать это возможным.
Unix avatar
флаг cn
Можно ли использовать псевдонимы bash через ssh? Например: `alias ipa="nc -w1 -u 4545"`, поэтому им не нужно вводить точную фразу, только псевдоним `ipa`.
sancho.s ReinstateMonicaCellio avatar
флаг pl
Какую версию Ubuntu они используют?
sancho.s ReinstateMonicaCellio avatar
флаг pl
Является ли приемлемым решением то, что вместо того, чтобы узнать новый IP-адрес, они восстанавливают старый IP-адрес? Если это так, вы можете установить задачу crontab, которая проверяет текущий IP-адрес и всякий раз, когда он отклоняется от установленного значения, изменяет его обратно.
sudodus avatar
флаг jp
`@reboot` или через какой-то интервал? Согласятся ли фермеры с тем, что они не могут изменить IP-адрес самостоятельно, а должны оставаться с предустановленным значением, установленным вашей компанией и запомненным вашей компанией?
James S. avatar
флаг de
Как IP-адреса назначаются этому встроенному устройству? Статический или DHCP? У кого есть доступ к локальной сети, к которой подключаются эти устройства? могут ли они просто посмотреть таблицу ARP на маршрутизаторе, найти MAC-адрес вашего встроенного устройства и вуаля?
James S. avatar
флаг de
netcat (`nc`) здесь не подходит. Вы пробовали `nmap`?
Robert Riedl avatar
флаг us
как они получают оповещения или данные датчиков, если забывают IP?
флаг ng
@RobertRiedl Датчики не подключены через локальную сеть, они подключены через RS485 и шину CAN, ПК используется только для мониторинга датчиков
флаг ng
@Джеймс С. Уважаемый Джеймс, как я уже говорил ранее, датчики подключены к ПК с помощью последовательной шины связи, они не имеют подключения к локальной сети. DHCP-сервер здесь не используется. фермеры подключают имеющийся у нас ПК к своему НОУТБУКУ/ПК для контроля датчиков.
флаг ng
@Джеймс С. как использовать nmap здесь?
Robert Riedl avatar
флаг us
Итак, чтобы проверить датчики, они подключаются через свой собственный ноутбук / ПК к этому серверу Ubuntu ... через SSH / Web (?) по IP-адресу? Или есть приложение, которое загружает данные датчика на ПК фермера? Лучший способ отслеживать IP-адрес — регулярно сообщать об IP-адресе серверу Ubuntu.
sancho.s ReinstateMonicaCellio avatar
флаг pl
@RobertRiedl - это часть [этого ответа] (https://askubuntu.com/a/1359269/226614).
Robert Riedl avatar
флаг us
@sancho.sReinstateMonicaCellio, вы имеете в виду «трансляционную» часть вашего ответа? Ну да, частично. Для меня имеет значение, должен ли пользователь вводить IP-адрес в браузере, или есть ли имя DNS, или если они запускают приложение и т. д. Если у них есть приложение, то, возможно, мы можем каким-то образом отобразить IP-адрес в приложение ... если это DNS-имя, то оно должно быть разрешимым и т. д. в противном случае см. мой ответ о том, как транслировать с помощью `netcat`
Рейтинг:1
флаг pl

Как указано, проблема выглядит слишком широкой. Насколько я понимаю, у вас две разные проблемы:

  1. Создайте метод, чтобы избежать проблемы в будущих случаях.
  2. Доступ к серверам, которые В настоящее время есть проблема, реализовать решение 1.

Для проблемы №1, вместо того, чтобы узнать новый IP-адрес, вы можете заставить серверы восстановить старый IP-адрес до фиксированного значения. Вы можете установить задачу crontab, которая проверяет текущий IP-адрес и всякий раз, когда он отклоняется от заданного значения, изменяет IP-адрес обратно на целевой. У вас, конечно, будут временные окна «сетевой слепоты», в зависимости от частоты, установленной в crontab.

Кроме того, задача crontab может транслировать/отправлять электронную почту и т. д. новый ИП. Правильные механизмы во многом зависят от того, что вы хотите использовать, как вы получаете доступ к серверам.

Все это кажется обходным путем. При правильной настройке они не должны «забывать IP-адрес ПК». Это то, что нужно исправить, я думаю. Если бы вы могли предоставить больше информации о текущей конфигурации, это сузило бы проблему.

Для проблемы №2, если это ваша цель, пожалуйста, укажите это. У меня похожая проблема. Сервер, к которому я обращаюсь удаленно, время от времени меняет IP-адрес, поскольку он назначается DHCP. Всякий раз, когда у меня есть проблемы sshподключаясь к серверу, я выполняю небольшой скрипт, который с помощью комбинации пинг и ssh (в цикле IP-адресов) и проверив ответ, можно получить текущий IP-адрес. В зависимости от многих аспектов конфигурации вашей сети это может работать для вас или нет.

Рейтинг:1
флаг us

С сетевая кошка вы можете сделать что-то вроде cronjob на ваших «серверах, установленных на столбе», который делает что-то подобное каждые X минут:

#!/бин/баш

# замените eth0 на имя вашего интерфейса или получите IP другими способами

ip="$(ifconfig | grep -A 1 'eth0' | tail -1 | cut -d ' ' -f 10)"
датум=$(дата)
echo "Это мой IP-адрес: "$ip | netcat -q 2 -b -u 255.255.255.255 12001

Затем пользователю/фермеру нужно только слушать так:

эхо | нк-ulp 12001

И через X минут они должны получить что-то вроде этого:

Это мой IP: 192.168.1.121

Однако это работает только в том случае, если «фермерский ПК» и ваши «серверы на столбах» находятся в одной и той же подсети.


Объяснение:

Скрипт отправит широковещательную рассылку UDP на порт 12001 и завершит работу. нк, после полезной нагрузки (наш эхо команда) + 2 секунды. IP не должен быть получен через ifconfig очевидно, но его довольно легко разобрать ..

Отправка на 255.255.255.255 означает широковещательную рассылку на всю подсеть, независимо от размера.

Таким образом, нам не нужно знать, в какой сети мы находимся.

На стороне клиента мы слушаем с нк пока не получим полезную нагрузку. я нашел нк завершается чисто в сочетании с разрывом строки (через эхо).

Рейтинг:1
флаг pe

Если вы используете авахи на вашем встроенном ПК вам не придется заново изобретать/повторно реализовывать сервис-обнаружение

На встроенном ПК:

apt-get установить avahi-daemon
systemctl включить avahi-daemon --now
без комментариев #publish-workstation=yes в /etc/avahi/avahi-daemon.conf
systemctl перезагрузить avahi-daemon

На машине, используемой для обнаружения встроенных ПК:

apt-get установить avahi-utils
avahi-browse -atr # будет выводить имена и IP-адреса устройств в сети на терминал
Рейтинг:1
флаг cn

Я предполагаю, что фермеры перенастраивают его, потому что их локальный сетевой адрес меняется. В этом случае, почему бы не позволить серверу получить свой адрес через DHCP, вы можете записать адрес Mac (который не изменится), а затем выполнить поиск в таблицах серверов DHCP или даже попробовать выполнить поиск на DNS-сервере, чтобы найти компьютер Отсоединение кабеля от конца коммутатора и его повторное подключение должно инициировать сеанс настройки DHCP. Большинство серверов DHCP позволяют вам назначать адрес на основе адреса Mac, поэтому у вас есть некоторый контроль над ним на стороне сервера DHCP.

флаг ng
у них нет никакого DHCP-сервера, у них есть только этот ПК с таким количеством датчиков, как (газ, температура и ....)
SEWTGIYWTKHNTDS avatar
флаг cn
В этом случае сделайте свой сервер DHCP-сервером и раздайте IP-адреса клиентам, которые хотят подключиться. Тогда нет проблем с поиском IP-адреса.
jpbrain avatar
флаг ca
Привет @Parsa. Из прочитанного кажется, что самый простой способ - настроить сервер DHCP / mdns на сервере. Таким образом, вы подключаетесь к нему с помощью DHCP на клиенте, и вы сможете сканировать подсеть или просто подключиться к маршруту по умолчанию.

Ответить или комментировать

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