Сеть - Доступ к другим компьютерам - Как найти IP-адрес клиента?

Аппаратное обеспечение выглядит так:

  • Ноутбук с доступом в интернет через WiFi. Роутер практически недоступен.
  • Безголовый Банан / Малина / Ваш любимый вкус Pi, для которого требуется образ SD и некоторые дополнительные пакеты.

Поэтому я получаю временный перекрестный кабель между Pi и ноутбуком, настраиваю порт Ethernet ноутбука как "Общий для других компьютеров" (*), создаю образ SD-карты и загружаю Pi. Теперь, какой адрес у Пи, чтобы я мог подключиться к нему по SSH?

Мне не нужно вводить конкретный адрес, как этого хочет вопрос. Я просто хочу знать, что это такое.


(*) Уведомление о сети -> Изменить подключения... -> Проводное подключение 1 -> Кнопка редактирования -> вкладка Настройки IPv4 -> Метод = Доступ к другим компьютерам

2 ответа

Решение

Есть пара вещей, которые вы можете сделать. Предполагая, что у вас есть единственное соединение Ethernet, идущее с ноутбука на малину, то arp-scan будет достаточно. Сначала выясните, как называется ваш интерфейс Ethernet. В моем случае это eth3, Итак, вот пример:

bash-4.3$ sudo arp-scan -I eth3 --localnet
[sudo] password for xieerqi: 
Interface: eth3, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.8.1 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.42.0.40  b8:27:eb:96:38:91   (Unknown)

1 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.8.1: 256 hosts scanned in 1.459 seconds (175.46 hosts/sec). 1 responded

В выводе вы можете видеть, что мой Raspberry имеет IP-адрес 10.42.0.40.

arp-scan это очень простой подход и не требует слишком много пота. Альтернативные методы также могут быть использованы. Вот несколько из них:

  • Знание первых 3 октетов сети (например, через ip addr show eth3 в моем случае), вы можете написать простой скрипт, который пингует диапазон хостов. (См. Ниже скрипт Python, который делает это).
  • fping альтернатива стандарту ping команда, которая позволяет исследовать диапазон хоста
  • Ты можешь использовать nmap выполнить обнаружение хоста различными способами. В частности, эта команда: nmap -e eth3 -sn 10.42.0.0/24 будет работать лучше - он инструктирует nmap выполнять обнаружение хоста только с -sn опция (которая под капотом отправляет запросы ARP на широковещательный MAC-адрес) на интерфейсе, указанном -e вариант. 10.42.0.0/24 это нотация CIDR для сети. Достаточно просто.
  • Wireshark также может использоваться для захвата пакетов на вашем интерфейсе Ethernet. Конечно, ваш Raspberry должен отправлять некоторые пакеты в первую очередь для их захвата, поэтому он может не сработать, если у вас нет "разговорчивой" малины. Однако вы можете запустить захват, отфильтровать по протоколу UDP, отключить и снова подключить Raspberry. Вы должны увидеть запрос DHCP и ответ на него

  • Устройства формируют свою таблицу arp со временем, когда хосты появляются / исчезают из сети, так что вы также можете использовать arp -a команда.

  • Если вы используете стандартную Ubuntu и не устанавливали альтернативные DHCP-серверы, вы можете проверить dnsmasq файл аренды, IP-адрес которого был назначен вашим устройствам. Например:

    bash-4.3$ cat /var/lib/misc/dnsmasq.leases 
    1479095355 b8:27:eb:96:38:91 10.42.0.40 localhost *
    

    Смотрите мой связанный вопрос здесь: аренда DHCP для Raspberry Pi не найдена


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

Так как я упомянул сценарий с ping вот один:

from subprocess import *
network = '10.42.0.'
for num in range(255):
    i = str(num)
    dn = open('/dev/null','w')
    try:
        print('checking ' + network + i)
        check_call(['ping', '-c','1', '-W',
                    '1','-q',network + i],stdout=dn)
    except CalledProcessError:
        pass
        #print('10.42.0.' + i + ' is down')
    else:
        print('>>> ' + network + i + ' is up')

Это будет пинговать диапазон 256 адресов моей сети (10.42.0.x) и укажите, какой из хостов работает. Пинг истекает через 1 секунду, поэтому на сканирование всего потребуется 256 секунд. Если у вас есть только одна малина, вы можете отредактировать скрипт, чтобы выйти, если ip отвечает на ping, тем самым ускоряя процесс. Вы также можете создать определенное количество потоков. arp-scan Однако все еще остается более быстрой альтернативой.

Может быть, эта ссылка может быть полезна: https://www.raspberrypi.org/documentation/remote-access/ip-address.md

Основная часть:

Установите nmap:

apt-get install nmap

Выполните проверку ping:

nmap -sn <your-subnet>

Например:

nmap -sn 192.168.1.0/24

Тогда у вас будет вывод, похожий на этот:

Starting Nmap 6.40 ( http://nmap.org ) at 2014-03-10 12:46 GMT
Nmap scan report for hpprinter (192.168.1.2)
Host is up (0.00044s latency).
Nmap scan report for Gordons-MBP (192.168.1.4)
Host is up (0.0010s latency).
Nmap scan report for ubuntu (192.168.1.5)
Host is up (0.0010s latency).
Nmap scan report for raspberrypi (192.168.1.8)
Host is up (0.0030s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.41 seconds

Иногда я использую также мобильное приложение, если Wi-Fi доступен: https://play.google.com/store/apps/details?id=ua.com.streamsoft.pingtools

Другие вопросы по тегам