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のネットワークでは動作しない。