linux邮件断开连接,linux – 如何找到断开连接的xrdp会话?

2023-05-16

这是一种获取断开连接的xrdp会话列表的方法.它依赖于以下事实:在正常的X会话管理器使用中,xrdp服务器是唯一建立到Xvnc X Window System显示服务器的TCP连接的客户端.当xrdp会话处于活动状态时,关联的Xvnc显示服务器有两个TCP连接,一个处于ESTABLISHED状态,另一个处于LISTEN状态.使用lsof(1)程序看起来像这样.

$sudo lsof -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

Xvnc 1625 guest 1u IPv4 252910 0t0 TCP 127.0.0.1:5910 (LISTEN)

Xvnc 1625 guest 9u IPv4 261226 0t0 TCP 127.0.0.1:5910->127.0.0.1:35242 (ESTABLISHED)

如果远程会话的用户通过关闭RDP连接(或者,在Apache Guacamole RDP会话的情况下,通过关闭浏览器窗口)放弃它,它看起来像这样:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

Xvnc 1625 guest 1u IPv4 252910 0t0 TCP 127.0.0.1:5910 (LISTEN)

请注意,此断开连接的Xvnc显示服务器进程没有ESTABLISHED连接.因此,任何只监听的Xvnc进程都是断开连接的会话.

这是一个shell脚本(名为lsdisconnected),它显示每个断开连接的远程会话的PID和USER.它使用lsof(1)和gawk(1)来实现连接逻辑.

#!/bin/bash

sudo lsof -FRgpLT -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999 |

gawk '

match($0,/^p([0-9]+)/,p) {pid = p[1]; pids[pid]=0; } ;

match($0,/^L([A-Za-z0-9]+)/,p) {user[pid] = p[1]; } ;

/TST=LISTEN/ {pids[pid] = pids[pid] - 1 ;};

/TST=ESTABLISHED/{pids[pid] = pids[pid] + 1};

END {

for (pid in pids){

if (pids[pid] < 0) {

print pid,user[pid];

}

}};

'

这是查找断开连接的远程桌面会话的便捷方法;断开连接后立即工作,无需使用空闲时间.

对于那些可能不熟悉lsof(1)的人,这里是对这个例子中命令行参数的解释.

> -b -w避免了lsof内核等待.这里不需要它们.> -n避免对主机名进行DNS查找.> -c / ^ Xvnc $/ b使用正则表达式查找具有确切命令名称Xvnc的进程.> -a告诉lsof在过滤时使用AND而不是OR.> -iTCP:5900-5999过滤器,TCP端口编号为5900 – 5999,用于X显示连接.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux邮件断开连接,linux – 如何找到断开连接的xrdp会话? 的相关文章

随机推荐