У меня очень типичная ситуация, в которой я хочу подключить телефон (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-адресу.
- Настройте статическую карту.


