Как определить IP данного устройства в той же сети

Как определить IP данного устройства в той же сети

У меня очень типичная ситуация, в которой я хочу подключить телефон (android) к ноутбуку linux в той же сети (wifi) с помощью ssh. IP-адреса назначаются DHCP, поэтому я заранее знаю только один клиент. Зная IP-адрес клиента, я мог бы в принципе выполнить команду ssh по всем возможным IP-адресам в той же сети, чтобы проверить, прослушивает ли ее сервер. Однако это кажется крайне неэффективным. Итак, как мне узнать IP-адрес моего хоста (зная его MAC-адрес), чтобы я мог подключиться к нему с помощью ssh? Я знаю о другом программном обеспечении, которое делает что-то подобное, так что это должно быть возможно. Связанный: могу ли я динамически назначить имя хоста этому IP-адресу на клиенте (предполагая, что это Linux), чтобы я мог использовать статическую запись в файле конфигурации ssh?

решение1

Это можно сделать в два следующих шага:

Шаг 1:

Просканируйте свою подсеть, чтобы заполнить кэш ARP. Есть методы, но я предлагаю fping. Установите его на Ubuntu, выполнив команду ниже в терминале:

apt-get install fping

...затем просканируйте свою сеть (например, подсеть 192.168.10.0/24):

fping -g 192.168.10.0/24

Теперь кэш ARP заполнен MAC-адресами устройств в вашей подсети.

Шаг 2

Примените соответствующий фильтр к вашему ARP-кэшу, чтобы просто увидеть целевое устройство. Просто используйте следующую команду (где aa:bb:cc:dd:ee:ffнаходится MAC-адрес устройства):

arp -n | grep -i aa:bb:cc:dd:ee:ff | cut -c-15

На выходе получается IP-адрес целевого устройства.

ПРАВКА1:

Пример MAC-адреса был изменен на нижний регистр, поскольку Linux отображает его именно таким образом (в отличие от Microsoft Windows, использующей верхний регистр)

ПРАВКА2:

Следующий скрипт bash добавляет запись в файл hosts ( /etc/hosts) с именемсотовый телефончтобы вы могли получить доступ к своему устройству по именисотовый телефон. Чтобы обновить связанный IP-адрес, просто запустите его снова. Измените name, macи subnetна нужные значения.

#!/bin/sh
name="cellphone"
mac=aa:bb:cc:dd:ee:ff
subnet=192.168.10.0/24
fping -g ${subnet}
ip="$(arp -n | grep -i ${mac} | cut -c-15)"
sed -i".bak" '/'${name}'/d' /etc/hosts
if [ -z "$ip" ]; then
    echo "Device not found!"
else
    echo "${ip}\t${name}" >> /etc/hosts
fi

решение2

ZeroconfЗдесь может быть решение. Это протокол для обнаружения служб в сети и установления связи между двумя хостами.

Если вы настроите avahi mDNS (пакеты avahi-daemonи libnss-mdns), хосты будут объявлять свои имена хостов, и вы сможете разрешить их с помощью <hostname>.local.

решение3

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

Исходя из этого, наиболее простым решением будет настроить DHCP-сервер на выдачу статического IP-адреса для соответствующего MAC-адреса.

У вас есть контроль над DHCP-сервером? Если да, то вы, вероятно, можете сделать одно из двух:

  • Проверьте журналы, чтобы узнать, какой IP-адрес был назначен данному MAC-адресу.
  • Настройте статическую карту.

Связанный контент