Pythonでローカルエリアネットワーク内のデバイスを取得するにはどうすればよいですか?

Pythonのソケットライブラリとネットワークスキャナーを使用して、ローカルエリアネットワーク内のデバイスを取得できます。

以下は、Python のソケットライブラリを使用してローカルエリアネットワーク上のデバイスをスキャンするための簡単な例です。

import socket

def scan_devices():
    # 获取本机IP地址
    ip = socket.gethostbyname(socket.gethostname())
    
    # 获取局域网前缀
    prefix = '.'.join(ip.split('.')[:-1]) + '.'
    
    # 遍历局域网IP地址,扫描设备
    devices = []
    for i in range(1, 255):
        address = prefix + str(i)
        try:
            # 创建socket连接
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.settimeout(0.1)
            
            # 尝试连接IP地址
            result = s.connect_ex((address, 80))
            
            # 如果连接成功,则表示设备存在
            if result == 0:
                devices.append(address)
                
            # 关闭socket连接
            s.close()
        except socket.error:
            pass
    
    return devices

# 调用函数进行设备扫描
devices = scan_devices()

# 打印扫描到的设备
for device in devices:
    print(device)

この例では、最初にsocket.gethostbyname(socket.gethostname())メソッドを使って本機IPアドレスを取得し、次にIPアドレスを分割して、ローカルネットワークのプレフィックスを取得します。次に、ローカルネットワーク内のIPアドレスを繰り返して、ソケット接続を作成してIPアドレスへの接続を試行することで、デバイスが存在するかどうかを判断します。

なお、本サンプルでは、ローカルネットワーク内の機器に対してスキャンするのみであり、機器の80番ポート(HTTPポート)が開いていることのみ確認できる。機器側で他のポートが開いていたり、他のプロトコルを使っていたりする場合には、ポート番号や接続方法を変更する必要がある。また、本サンプルはIPv4のネットワークでのみ動作し、IPv6のネットワークでは動作しない。

bannerAds