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:10ssh 也正在设置SSH_CLIENTSSH_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中的其他系统远程访问的主要内容,如果未能解决你的问题,请参考以下文章

如何识别文件是不是是java中的命名管道

系统如何识别问题是不是已被回答

Qt编写百度离线版人脸识别+比对+活体检测

人工智能人脸识别并不是百分百安全,该如何扭转目前人脸识别被滥用的现状?

基于QT和OpenCV的人脸检测识别系统

实战:QT车牌识别系统综合设计