Qt::如何识别/检测系统是不是被Linux中的其他系统远程访问
Posted
技术标签:
【中文标题】Qt::如何识别/检测系统是不是被Linux中的其他系统远程访问【英文标题】:Qt::How to identify/detect if the system is Remotely access by other system in LinuxQt::如何识别/检测系统是否被Linux中的其他系统远程访问 【发布时间】:2012-09-25 04:47:44 【问题描述】:我正在 ubuntu 中开发一个应用程序来通过 QT 远程访问其他系统。两个系统都在运行一些 Qt 应用程序。我想使用 Qt 编程远程检查/更改另一个系统。
我想在远程系统上添加一个按钮(作为退出屏幕),它应该是“仅在远程访问系统时启用”,这样我就可以用它来关闭远程访问屏幕。
有没有什么方法可以通过编程获取远程访问时的状态???
我在论坛上找到了一些解决方案,但它们特别适用于 Windows。 我正在寻找 Linux 中的一些解决方案。
请提供建议/链接,以便我可以解决这个问题。
提前致谢
【问题讨论】:
更准确地定义“通过 Qt 远程访问”对您意味着什么。另外,请详细说明您考虑的 Windows 特定解决方案。 @BasileStarynkevitch,使用 Qt 我可以使用 QProcess 中的“VNCViewer”登录到远程屏幕显示。而Window Specific是指使用windows库函数来获取系统状态。windows有很多解决方案。但我正在寻找 Linux 中的解决方案。 那么远程访问不是来自你的应用程序,而是来自VNCViewer
程序。您可以使用我的回答中提到的netstat
。
或以编程方式深入/proc/net/
.... 所以请阅读proc
【参考方案1】:
如果您使用X11 协议的远程显示功能,您可以检查DISPLAY
变量的值。对于本地连接,通常以:0
开头;对于远程连接,它包含显示服务器的主机名。对于通过ssh -X
的连接,它可能是localhost:10
和ssh
也正在设置SSH_CLIENT
和SSH_CONNECTION
环境变量。
否则,您应该更好地为您定义什么是远程访问(即更多地解释您的应用程序)。您的 Qt 应用程序也可能是例如一些 TCP/IP 服务器。也许getpeername(2) 系统调用可能是相关的。
如果您只是对流入您的盒子的远程连接感兴趣(独立于特定应用程序),您可以阅读(例如使用popen
)命令netstat -a -n
的输出或使用一些/proc/net/
目录。
【讨论】:
感谢您的回答。我尝试使用 netstat。它提供了已建立的端口侦听/连接列表。有什么方法可以过滤掉已建立的连接/检查特定的端口。从编程的角度来看,它对我们列表非常不方便。 另外,当系统被远程访问时,它会在顶部面板上创建一个 ICon。所以我认为,必须有一个内置的Linux库函数(就像窗口一样)来获取远程访问时的屏幕状态。 @skg 来吧,这是 linux!netstat -a -n | grep ESTABLISHED
是一个开始。
@DouglasB.Staple,感谢您的回答。这是最好的方法之一。但我仍然认为还有更多的方法可以以编程方式实现这一目标。如果我找到更好的方法,肯定会在这里更新。以上是关于Qt::如何识别/检测系统是不是被Linux中的其他系统远程访问的主要内容,如果未能解决你的问题,请参考以下文章