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

#!/bin/bash
stty -echo
IFS= read -p 'Enter password: ' -r password
stty echo
printf '\nPassword entered: %s\n' "$password"
  • stty -echo выключает терминальное эхо, которое является дисплеем, о котором Вы говорите;
  • IFS= необходимо для сохранения пробела в пароле;
  • read -r выключает интерпретацию обратной косой черты.

В bash можно также использовать read -s, но эта функция не является стандартной через оболочки.

3
16.10.2013, 11:58
3 ответа

Можно сделать это в выполняющем двух шагов:

Step1:

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

apt-get install fping

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

fping -g 192.168.10.0/24

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

Step2

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

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

Вывод является IP-адресом целевого устройства.

EDIT1:

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

EDIT2:

Следующий сценарий удара добавляет запись в файл 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
5
27.01.2020, 21:09
  • 1
    Очень хороший, работы! MAC-адрес должен быть нижним регистром, таким образом, незначительное улучшение arp -n | grep -i AA:BB:CC:DD:EE:FF | cut -c 1-15. Так как Вы упоминаете arp: Я задавался вопросом, могу ли я использовать его, или подобный для присвоения имени хоста IP, я получил таким образом. Таким образом, что у меня может быть статический ssh файл конфигурации. –  highsciguy 18.10.2013, 20:52
  • 2
    я запустил бы с nmap, но это просто, потому что это - то, к чему я привык. Хороший ответ. Идеальное решение. –  bahamat 18.10.2013, 21:12

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

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

4
27.01.2020, 21:09
  • 1
    Я должен сделать это на обоих устройствах? Затем это - вероятно, что-то, что было бы трудным на андроиде? –  highsciguy 16.10.2013, 12:28
  • 2
    Да. Zeroconf работает посредством рекламы и исследования. Я не знаю, существуют ли zeroconf реализации для Android. –  Marco 16.10.2013, 12:36
  • 3
    поиск Google показывает, что существуют реализации Zeroconf для Android, испытывая недостаток в устройстве на базе Android, я не могу оказать дополнительную помощь. У Вас могло бы быть больше удачи на Android SX. –  Marco 16.10.2013, 14:23

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

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

Вы управляете сервером DHCP? Раз так Вы могли, вероятно, сделать одну из двух вещей:

  • Проверьте журналы для наблюдения, какой IP данный MAC был выделен.
  • Установите статическую карту.
2
27.01.2020, 21:09
  • 1
    Да, это - то, что я хочу, но я на самом деле не управляю им (по крайней мере, не все они). –  highsciguy 16.10.2013, 12:16

Теги

Похожие вопросы