Rhode and Schwarz オシロスコープまたはイーサネット接続を使用してラップトップに接続されているテスト機器の IP アドレスを自動検出する Python コードを作成しようとしています。
私の職場の R&S スコープの IP アドレスは、常に同じ 2 つの数字 169.254.XX で始まりますが、トリックは、スコープの IP アドレスが arp -a レポートに表示されるのは、その IP アドレスを使用してスコープにアクセスした場合のみです。私のブラウザ。その後、IP は arp レポートに表示されますが、何もない前に IP アドレスはそこにありません。
そこで、うまくいくと思って次のコードを書きましたが、ブラウザの URL バーに IP アドレスを入力する前に IP アドレスが表示されないため、うまくいきません。私の目標は、スコープのタッチスクリーンをタップして機器の IP を調べるのではなく、コンピューターのボタンを 1 つクリックするだけでスコープの IP アドレスを特定することです。
import tkinter as tk
import time
import threading
import queue
import subprocess
root = tk.Tk()
root.title("SCPI test")
canvas1 = tk.Canvas(root, width=200, height=140, bg='lightsteelblue2', relief='raised')
canvas1.pack()
q1 = queue.Queue()
q2 = queue.Queue()
def auto_detect_ip(num1, num2, num3, num4):
ping_list = []
ping_ok_list = []
t1 = time.time()
for i in range(num1, num2, -1):
for j in range(num3, num4, -1):
temp = "169.254." + str(i) + "." + str(j)
# temp = "192.168.1.1"
try:
p = subprocess.run(["ping", "-n", "1", temp], stdout=subprocess.PIPE, timeout=float(timeout_value))
# p = subprocess.run(["ping", "-n", "1", temp], stdout=subprocess.PIPE, timeout=0.006)
return_code = p.returncode
print("return_code :", return_code)
if return_code == 0:
print("ip_address :", temp)
ping_ok_list.append(temp)
break
except subprocess.TimeoutExpired:
pass
time.sleep(0.00001)
else:
continue
break
len_list_ping = len(ping_list)
print("len_list_ping :", len_list_ping)
print("ping_ok_list :", ping_ok_list)
t2 = time.time()
print("time :", t2 - t1)
if num4 == 0:
q1.put(ping_ok_list)
else:
q2.put(ping_ok_list)
def launch_thread():
print("scan running")
thread_1 = threading.Thread(target=auto_detect_ip, args=(254, 0, 128, 0))
thread_2 = threading.Thread(target=auto_detect_ip, args=(254, 0, 254, 128))
thread_1.setDaemon(True)
thread_2.setDaemon(True)
thread_1.start()
thread_2.start()
def found_rs_scope():
launch_thread()
ping_ok_list = q1.get() + q2.get
print("IP_list :", ping_ok_list)
私の解決策は、各 IP アドレスをスキャンしてスコープ 1 を見つけることでしたが、ブラウザからスコープにアクセスする前にプロンプトの arp -a に IP が表示されないためです。そのため、スキャン中に一致がなく、IP が見つかりません。私はそれが実行可能であるべきだと思いますが、私はそれを行う方法がわかりません。また、管理者権限を必要とせずにスコープの IP アドレスを見つけられるようにしたいと考えています。