Files
remote-volume-monitor/Test/Scripts/test_rdp_disconnect.py
Agent 45e7d9553a Initial commit - 按新规范整理目录结构
- Code/: 源代码、配置文件、文档、工具
- Releases/: 发布包(v1.0)
- Test/: 测试用例和测试脚本
2026-03-20 06:54:40 +08:00

145 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()