通过使用Python

时间:2017-11-20 16:18:14

标签: python networking raspberry-pi

我使用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()

2 个答案:

答案 0 :(得分:1)

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

您可以使用(非Python)实用程序(如nmap(nmap.org))进行端口扫描,它可以执行" os指纹识别"。

此外,如果您与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/

答案 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'}