我需要在本地网络上找到Raspberry PI IP地址,而无需将Raspberry连接到监视器。如何在Linux或Mac OS系统上进行操作?

评论

可能不知道IP地址就将SSH复制到Raspberry Pi中

智能手机上的Lan扫描应用程序将显示您网络上的所有设备。

#1 楼

所有树莓派设备的MAC地址都以B8:27:EB开头(对于RPi4 B,它们以dc:a6:32开头,请在适当的地方替换)。
因此,在* nix系统上,这可以通过执行以下命令来实现:
nmap -sP 192.168.1.0/24 | awk '/^Nmap/{ip=$NF}/B8:27:EB/{print ip}'

其中192.168.1.*将是您的本地网络掩码。您将得到类似的答案:
Nmap scan report for raspberrypi.localnetwork.lan (192.168.1.179)

192.168.1.179是网络上的Raspberry Pi IP地址。
如果您使用的是Mac系统,则可以使用Homebrew安装nmap:
brew install nmap

在Windows上,您可以使用Wireshark并使用以下显示过滤器:
eth.addr[0:3] == B8:27:EB


评论


或使用更少的管道:nmap -sP 192.168.1.0/24 | awk'/ ^ Nmap / {ip = $ NF} / B8:27:EB / {print ip}'

–ripat
2014-2-26在12:08

谢谢@ripat,这简明得多-已更新!一个小细节,您需要以管理员身份运行,否则nmap将不会显示MAC地址。

– J. Costa
2014年2月26日在15:13

除非您尝试将raspberrypi毫无头绪地放置在使用DHCP分配IP的办公室环境中,否则您将不会理解此答案的重要性。为此@ripat喝彩

– Voke Ransom Anighoro
14年4月17日在11:53

因为nmap不会为我吐出主机名,所以该答案对我不起作用。但是,它的确激发了我使用nmap搜索打开的ssh端口的功能,这确实使我能够找到pi:sudo nmap -p 22 --open -sV 192.168.0.0/24(根据该人员的帖子)。

–罗斯·罗杰斯(Ross Rogers)
15年7月8日在17:06



“ sudo nmap -sP 192.168.1.0/24”不够(对我来说很麻烦)吗?

–玛丽安(MarianPaździoch)
15年12月14日在10:54

#2 楼

如果您运行的是MacOS或Linux,请尝试以下一种方法: (dc:a6:32:be:95)。您可以通过
$ arp -na | grep -i b8:27:eb

在RPi上进行检查。每个网卡都有条目。 eth0是有线互联网,wlan0是WiFi。

评论


此解决方案比nmap解决方案快得多!

– ryanm
2015年12月29日,下午3:49

此解决方案对我有用,不像nmap解决方案(仅列出一部分)。

–威尔伯特
16年2月15日在7:42

这只会显示已进入arp表的主机,因此有时会错过安静的主机。第一次进行一次nmap扫描可能会有所帮助。

–约瑟夫·希迪
16 Mar 10 '16 at 0:36

可能,但是对我而言,这从未失败。另外,这是一个简单的第一次尝试。

–装饰品
18年2月9日在10:44

谢谢你我稍加修改并使用arp -n | awk'/ b8:27:eb / {print $ 1}'现在。

– 0x01
18年4月6日在12:02

#3 楼

我使用mDNS / Bonjour为我的Pi赋予一个本地名称,例如pi.local。我不需要知道它的IP地址,它可以用作快捷方式,何时需要嵌入链接...

如何以及为什么为Pi分配本地名称

评论


太棒了!我曾经在本地摆弄/ etc / hosts来在桌面上获得此功能,这是一个更好的解决方案!非常感谢您的指导!

– 0x01
18-4-6在12:10



#4 楼

如果要为其使用GUI应用程序,则可以对Debian / Ubuntu使用Yakala工具(https://github.com/mozcelikors/yakala)。此工具不仅可以帮助您搜索可用的B型和C型网络,而且还可以帮助您直接SSH进入网络:

br />
sudo add-apt-repository ppa:mozcelikors/yakala
sudo apt-get update
sudo apt-get install yakala




免责声明:我是Yakala的创建者。任何建议/错误都非常重视。

评论


在很久以前,1993年就放弃了有类网络。

–轨道轻赛
18 Mar 26 '18 at 17:28

什么是全班级联网?

–丹尼斯
19年6月22日在10:23

#5 楼

默认情况下,树莓派的名称是raspberrypi。您可以仅“ ping raspberrypi”,ICMP回显答复将为您提供IP地址。它为我工作。确保DHCP服务器可访问,因为树莓派的NIC在DHCP客户端模式下默认为可用。否则,覆盆子将获得APIPA地址。

#6 楼

在linux和MAC中,您还可以在终端中键入“ arp-a”,然后获取已连接设备的列表,查找其中带有B8的设备,例如:192.168.4.5 @ B8 ...树莓派IP。

#7 楼

我在Android智能手机中使用免费的Fing应用。它扫描网络并按类型显示连接的设备,包括Raspberry Pi,以及扫描可用的端口。方便查看SSH,Web或VNC是否已启用并正在运行。

#8 楼

或者您可以通过浏览器访问路由器并找到您的android设备-几乎每个路由器GUI都有一项服务,您可以在其中检查当前连接到网络的所有设备。

#9 楼

如果您运行MacOS,请使用PiFinder,它是一个可以告诉您网络上Raspberry Pi的IP的应用程序。

#10 楼

将以下内容复制到您的终端机/控制台/外壳中:到您的个人网络。 br />

192.168.1.109将是您的Raspberry Pi的IP…:)

#11 楼

将其放入Web服务器上的pi.php中:

<?php
$fp = fopen('pi', 'w');
fwrite($fp, $_REQUEST['ip'],1000);
fclose($fp);
?>


您可能必须在具有Web服务器写入权限的Web服务器上创建文件pi。

放置


curl http://yourwebserver/pi.php -d ip=`hostname -I`

在您的pi上的/etc/rc.local中。

通过浏览http:// yourwebserver / pi

#12 楼

使用全新安装的NOOBS或Raspbian时,默认主机名是“ raspberrypi”,在某些网络配置中(例如,如果正在使用和配置mDNS),则可以使用“ raspberrypi.local”。另一种选择是运行arp -a并查找raspberrypi

注意:这不适用于每个实例。

评论


这个答案似乎混淆了几件事:不同的IP版本,DNS,也许还有mDNS。是否可以使用.local通常不取决于IPv6,也不取决于是否存在路由器。如果提供了mDNS支持,则pi-name.local可以解析为IPv6,否。一些家用路由器还使用.local作为其本地DNS域,这又独立于IPv6并取决于路由器型号。某些家用路由器使用不同的域,例如pi-name.fritz.box。

–TheDiveO
18-2-18在23:35



#13 楼

我的路由器为新发现的系统分配了一个以192.168.1.2开头的ip地址。有一天,我浏览了家里的每个系统并为其保留了地址。

这样,当我创建一个新系统时,其ip地址很可能是192.169.1.18。
使用串行控制台的另一种方法。您可以使用串行终端程序来登录树莓派。我建议使用速度(波特率)为115200的8N1(8位,无奇偶校验位,1个停止位)设置。您需要一个USB到串行(3V3)连接器。

#14 楼

Android上的“ Fing”或“ Net Analyzer”。显示整个网络。

#15 楼

如果您使用的是Windows,我建议您尝试使用此脚本。
它主要基于“ arp -a”命令,但是它可以节省一些额外的挖掘工作,并且当您的Raspberry不在Arp中时可以为您提供帮助表。

创建具有以下内容的文本文件,并将其重命名为find_raspberry_pi.bat

@echo off
:: This script, run from a Windows (10) machine, finds a Raspberry Pi on local network

set raspIp=
set myip=
set subnet=

:: Get IP for local PC
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set myip=%%b
set myip=%myip:~1%
echo IP for local PC: %myip%

:: Get subnet
set subnet=%myip%
setlocal enabledelayedexpansion
for /l %%a in (1,1,31) do if NOT "!subnet:~-1!"=="." set subnet=!subnet:~0,-1!
set subnet=%subnet:~0,-1%
setlocal disabledelayedexpansion  
echo Subnet: %subnet%
echo.

:top
:: Loop through arp table entries and look for Raspberry Pi's MAC address
for /f "tokens=1" %%f  in ('arp -a ^| findstr b8-27-eb') do (set raspIp=%%f)

if "%raspIp%"=="" (
    echo Discovering network...
    :: Ping all IPs in subnet from 1 to 254
    for /L %%N in (1,1,254) do start /b ping -n 1 -w 200 %subnet%.%%N >nul
    timeout 1 >nul
    goto :top
) else (
    echo Found Raspberry PI with IP: %raspIp%
)
echo.
pause


免责声明:


我不是原始脚本的作者,我只是对其稍作修改以与Raspberry Pi一起使用。很遗憾,我找不到原始的贡献者。
它不是防弹的,如果它开始扫描的子网不正确,它将无法工作。这是一个简单的解决方案

#16 楼

在2020年,已接受的答案不再起作用,因为Raspberry Pi附带了不同范围的MAC地址。我可以只添加“新” MAC作为注释,但是每个模型的字符串可能会一次又一次地更改。上面的主要区别是:我们不假定MAC模式,我们只是将grep用作(摘要),如下所示:此标签由nmap本身提供。由于nmap会不断更新,因此它包含Raspberry Pi MAC地址的内部表(或使用其他条件进行检测),我们可以假定它将继续工作。

注意:如果您的扫描未识别出您知道的所有网络上的Pi,请重复扫描-最多进行10次。具有网络Power Management:on的Pi可能并不总是响应扫描。

如果要在LAN上扫描多个Pi,则电源管理可能对您来说是个问题,因为重复扫描可能会检测到一个Pi,而不能检测到另一个Pi。在这种情况下,重复扫描以查找差异。 (要确认Pi是否启用了电源管理,请SSH到Pi并运行:/sbin/iwconfig wlan0|grep Management

#17 楼

我假设您无法连接到PI,否则您将知道它的IP。已经连接的设备。您可以尝试插入和拔下PI(并且一个设备应该出现在列表中/从列表中消失)

#18 楼

请首先尝试:
arp -a | grep -E --ignore-case 'b8:27:eb|dc:a6:32'

此命令中的两个十六进制字符串(b8:27:eb|dc:a6:32)反映了“基金会”用于生产所有RPi设备的两个OUI值-截至撰写本文时,通过RPi ver 4B。如果您的RPi不在您的arp缓存中,则此命令不会产生任何有用的信息。如果是这种情况,请在您喜欢的编辑器中创建以下文件,并将其保存/写入为pingpong.sh
#!/bin/sh

: ${1?"Usage: 
$ chmod 755 pingpong.sh
$ ./pingpong.sh 192.168.1. 
ip subnet to scan. eg '192.168.1.'"} subnet= for addr in `seq 0 1 255 `; do ( ping -c 3 -t 5 $subnet$addr > /dev/null ) & done arp -a | grep -E --ignore-case 'b8:27:eb|dc:a6:32'

使它可执行并运行(在此处使用您的网络地址,不一定是192.168。 1.):
raspberrypi3b.local (192.168.1.131) at b8:27:eb:1:2:3 on en0 ifscope [ethernet]
raspberrypi4b.local (192.168.1.184) at dc:a6:32:2:3:4 on en0 ifscope [ethernet]

结果可能如下所示:
q4312078q
在这种情况下,主机名由mDNS提供。如果没有/不使用mDNS / avahi / etc,则主机名将替换为以下字符:?

#19 楼

Raspbian使用的是mDNS,它允许您通过主机名raspberrypi.local访问树莓派。
因此,您不再需要搜索IP地址,只需像这样连接: