我使用Raspberry Pi从我们公司网络的DHCP主机获取其IP地址。我想在没有连接显示器的情况下找到它的IP地址。
如何使用Python扫描一系列可能的IP是非常明显的,但是如何检查线路另一端是否有Raspberry Pi?
这是我到目前为止所尝试的内容(设备上应该有一个开放的ssh端口),但我还没有找到Raspberry Pi。现在我不确定我的Raspi是否没有正确连接或者我的方法根本不起作用:
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
for i in range(1,256):
ip = '192.168.132.{}'.format(i)
try:
s.connect((ip, 22))
print('Raspi is probably on {}'.format(ip))
except socket.error as e:
print('Nothing on {}.'.format(ip))
s.close()
答案 0 :(得分:1)
您的代码正在寻找打开ssh端口22的任何设备。所以你可能会得到误报。此外,如果Pi默认情况下没有打开端口22,那么您将无法获得匹配。
您可以使用(非Python)实用程序(如nmap(nmap.org))进行端口扫描,它可以执行" os指纹识别"。
此外,如果您与Pi在同一网络上,那么您应该在arp表中获取其MAC地址。 Raspberry Pi MAC地址应以" B8-27-EB"。
开头https://www.raspberrypi-spy.co.uk/2012/06/finding-the-mac-address-of-a-raspberry-pi/
答案 1 :(得分:0)
以下代码返回具有不同连接IP的字典。它可以在Raspberry和Windows 10上运行,并且可能应在所有OS上运行。 我将此用于Raspi上的套接字服务器。在Windows中,我只使用主机名。
info = dict()
conns = psutil.net_if_stats()
ifs = psutil.net_if_addrs()
for conn, snicstats in conns.items():
if snicstats.isup:
connifs = ifs[conn]
for connif in connifs:
if str(connif.family.name) == 'AF_INET':
info[conn[:17]] = connif.address
在Raspberry上的示例输出:
{'lo':'127.0.0.1','wlan0':'192.168.0.101'}