Initial commit - 按新规范整理目录结构
- Code/: 源代码、配置文件、文档、工具 - Releases/: 发布包(v1.0) - Test/: 测试用例和测试脚本
This commit is contained in:
144
Test/Scripts/test_rdp_disconnect.py
Normal file
144
Test/Scripts/test_rdp_disconnect.py
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user