#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ RDP 断开检测测试工具 专门测试 RDP 断开后的检测逻辑 """ import subprocess import os def check_query_user(): """检查 query user 输出""" print("\n" + "=" * 60) print(" query user 命令输出") print("=" * 60) try: result = subprocess.run( ['query', 'user'], capture_output=True, text=True, shell=True, timeout=5 ) print(f"\n{result.stdout}") if result.stderr: print(f"错误:{result.stderr}") # 详细分析 print("\n" + "=" * 60) print(" 详细分析") print("=" * 60) lines = result.stdout.strip().split('\n') for i, line in enumerate(lines): line_stripped = line.strip() line_lower = line_stripped.lower() if not line_stripped: continue print(f"\n第 {i+1} 行:{line_stripped}") # 检查标记 markers = [] if '>' in line_stripped: markers.append("✓ 当前会话") if 'rdp' in line_lower: markers.append("RDP 连接") if 'tcp' in line_lower: markers.append("TCP 连接") if 'active' in line_lower: markers.append("活跃状态") if 'disc' in line_lower: markers.append("已断开") if 'Console' in line_stripped or 'console' in line_lower: markers.append("控制台") if markers: print(f" 标记:{', '.join(markers)}") # 判断 if '>' in line_stripped: if 'active' in line_lower and ('rdp' in line_lower or 'tcp' in line_lower): print(f" → 结论:当前是活跃的 RDP 连接") elif 'disc' in line_lower and ('rdp' in line_lower or 'tcp' in line_lower): print(f" → 结论:RDP 已断开,应恢复本地音量") elif 'Console' in line_stripped: print(f" → 结论:本地控制台会话") else: print(f" → 结论:未知状态") return True except FileNotFoundError: print("✗ query 命令不存在(仅在 Windows 上可用)") return False except Exception as e: print(f"✗ 执行失败:{e}") return False def check_sessionname(): """检查 SESSIONNAME 环境变量""" print("\n" + "=" * 60) print(" 环境变量检查") print("=" * 60) session_name = os.environ.get('SESSIONNAME', '(未设置)') username = os.environ.get('USERNAME', '(未设置)') print(f"\nSESSIONNAME: {session_name}") print(f"USERNAME: {username}") if session_name.startswith('RDP'): print(f"\n⚠ SESSIONNAME 以 RDP 开头") print(f" 但这可能是已断开的会话,需要结合 query user 判断") elif session_name == 'Console': print(f"\n✓ SESSIONNAME 是 Console,本地会话") else: print(f"\n? SESSIONNAME 未知格式") return session_name def main(): print("\n") print("╔" + "═" * 58 + "╗") print("║" + " " * 12 + "RDP 断开检测诊断工具" + " " * 12 + "║") print("╚" + "═" * 58 + "╝") print("\n此工具用于诊断 RDP 断开后的检测问题") print("适用于:断开 RDP 后程序仍显示远程连接的情况") # 检查 session_name = check_sessionname() check_query_user() # 总结 print("\n" + "=" * 60) print(" 诊断总结") print("=" * 60) print("\n📋 判断规则:") print(" 1. 当前会话(带 >)+ active + RDP/TCP = 活跃远程连接") print(" 2. 当前会话(带 >)+ disc + RDP/TCP = 已断开,应恢复音量") print(" 3. 当前会话(带 >)+ Console = 本地会话") print(" 4. 无活跃 RDP 会话 = 本地状态") print("\n💡 如果断开 RDP 后仍显示远程连接:") print(" - 检查是否有 'disc' 标记被误判为 'active'") print(" - 检查是否有多个会话(一个断开 + 一个活跃)") print(" - 查看上方详细分析,确认哪一行被判定为远程") print("\n✅ 测试完成!") print("\n") if __name__ == '__main__': main()