Сеть - Доступ к другим компьютерам - Как найти 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