通过使用Python扫描IP来查找树莓派的IP



我使用Raspberry Pi,它从我们公司网络中的DHCP主机获取IP地址。我想在未连接显示器的情况下找出其 IP 地址。

例如,如何使用Python扫描一系列可能的IP是很明显的,但是我如何检查线路的另一端是否有Raspberry Pi?

这是我到目前为止尝试过的(设备上应该有一个开放的 ssh 端口(,但我还没有找到树莓派。现在我不确定我的 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()

您的代码正在查找打开 ssh 端口 22 的任何设备。 所以你可能会得到误报。 此外,如果 Pi 默认情况下不打开端口 22,那么您将不会获得匹配项。

您可以使用(非Python(实用程序(如nmap(nmap.org((来移植扫描,它可以执行"操作系统指纹识别"。

此外,如果您与 Pi 位于同一网络上,那么您应该在 arp 表中获取其 MAC 地址。 Raspberry Pi MAC 地址应以"B8-27-EB"开头。

https://nmap.org/

https://raspberrypi.stackexchange.com/questions/28365/what-are-the-possible-ouis-for-the-ethernet-mac-address

https://www.raspberrypi-spy.co.uk/2012/06/finding-the-mac-address-of-a-raspberry-pi/

以下代码返回一个包含不同连接 IP 的字典。它适用于Raspberry和Windows 10,并且可能应该适用于所有操作系统。我将其用于 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

覆盆子上的输出示例:

{'lo': '127.0.0.1', 'wlan0': '192.168.0.101'}

最新更新