3

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 アドレスを見つけられるようにしたいと考えています。

編集:オシロスコープで使用されるポートを確認しましたが、回答でbfrisが言及したように5025です。 ここに画像の説明を入力

4

2 に答える 2