自动检测罗德和施瓦茨示波器的 IP 地址

问题描述

我正在尝试编写一个 Python 代码,该代码将自动检测 Rhode 和 Schwarz 示波器或使用以太网连接连接到我的笔记本电脑的任何测试设备的 IP 地址。

我工作场所的 R&S 示波器的 IP 地址总是以相同的两个数字 169.254.XX 开头,但诀窍是只有当我使用它访问示波器时,示波器的 IP 地址才会出现在 arp -a 报告中我浏览器中的IP地址。之后 IP 显示在 arp 报告中,但在此之前 IP 地址不存在。

所以我写了下面的一段代码,认为它可以工作,但它没有,因为在浏览器的 URL 栏中输入 IP 地址之前没有显示 IP 地址。 我的目标是通过在我的电脑上点击一个按钮来确定示波器的 IP 地址,而不是点击示波器的触摸屏来找出设备的 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,-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",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,128,0))
    thread_2 = threading.Thread(target=auto_detect_ip,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 地址以找到作用域一,但由于在通过浏览器访问作用域之前,IP 没有出现在提示中的 arp -a 中。 所以在扫描过程中没有匹配,也没有找到 IP。 我认为它应该是可行的,但我只是不知道该怎么做。 此外,我希望能够在不需要管理员权限的情况下找到作用域的 IP 地址。

编辑: 我检查了示波器使用的端口,如 bfris 在他的回答中提到的那样,它是 5025。

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)