[GH-ISSUE #3587] [Feature Request] 希望有方法检测客户端的真实状态 #2862

Closed
opened 2026-05-05 13:51:08 -06:00 by gitea-mirror · 2 comments
Owner

Originally created by @Sharuru on GitHub (Aug 25, 2023).
Original GitHub issue: https://github.com/fatedier/frp/issues/3587

Describe the feature request

你好!

我使用 STCP 的方式进行远程桌面的访问。

配置方式如下:
用户(frpc) <----> 中转服务器 1(frps) <----> 中转服务器 2(frpc)<----> 目标工作站

用户通过配置文件中的 Service Name 来决定自己需要访问的具体工作站。
工作站的连接信息配置于中转服务器 2 中,通过不同的 Local IP 来控制。

示例配置:
用户端 frpc.ini

[REMOTE_RDP_1]
type = stcp
local_ip = 127.0.0.1
local_port = 33889

中转服务器 2 frpc.ini

[REMOTE_RDP_1]
type = stcp
sk = password
local_ip = 192.168.100.1
local_port = 3389

[REMOTE_RDP_2]
type = stcp
sk = password
local_ip = 192.168.100.2
local_port = 3389

在两者都在线的情况下,用户使用 mstsc 连接配置文件中设定的 Bind 绑定信息(127.0.0.1:33889)就可以访问到具体的工作站。

现在因为本地有一个自动化需求,当远程工作站在线时,通过第三方工具进行自动操作。
在设想的状态下,在 frpc 启动并连接的情况下,只要不停的检测本地的 Bind 地址是否可以访问即可,
如果可以访问,就启动 mstsc 并执行操作。

我用的检测方式是 PowerShell 的 Test-NetConnection,具体命令为:TNC -ComputerName 127.0.0.1 -Port 33889

但发现实际情况为:无论远程的工作站是否在线,只要 frpc 启动并成功连接 frps 的情况下,网络检测结果永远为在线。
预想的结果是只有当远程工作站在线的情况下才为 True,否则为 False。

不知道这是否是 frp 的设计特性导致?
不知道是否有什么可靠的方法、设定可以检测到实际客户端的在线状态?

谢谢!

Describe alternatives you've considered

No response

Affected area

  • Docs
  • Installation
  • Performance and Scalability
  • Security
  • User Experience
  • Test and Release
  • Developer Infrastructure
  • Client Plugin
  • Server Plugin
  • Extensions
  • Others
Originally created by @Sharuru on GitHub (Aug 25, 2023). Original GitHub issue: https://github.com/fatedier/frp/issues/3587 ### Describe the feature request 你好! 我使用 STCP 的方式进行远程桌面的访问。 配置方式如下: 用户(frpc) <----> 中转服务器 1(frps) <----> 中转服务器 2(frpc)<----> 目标工作站 用户通过配置文件中的 Service Name 来决定自己需要访问的具体工作站。 工作站的连接信息配置于中转服务器 2 中,通过不同的 Local IP 来控制。 示例配置: 用户端 frpc.ini ``` [REMOTE_RDP_1] type = stcp local_ip = 127.0.0.1 local_port = 33889 ``` 中转服务器 2 frpc.ini ``` [REMOTE_RDP_1] type = stcp sk = password local_ip = 192.168.100.1 local_port = 3389 [REMOTE_RDP_2] type = stcp sk = password local_ip = 192.168.100.2 local_port = 3389 ``` 在两者都在线的情况下,用户使用 mstsc 连接配置文件中设定的 Bind 绑定信息(127.0.0.1:33889)就可以访问到具体的工作站。 现在因为本地有一个自动化需求,当远程工作站在线时,通过第三方工具进行自动操作。 在设想的状态下,在 frpc 启动并连接的情况下,只要不停的检测本地的 Bind 地址是否可以访问即可, 如果可以访问,就启动 mstsc 并执行操作。 我用的检测方式是 PowerShell 的 Test-NetConnection,具体命令为:`TNC -ComputerName 127.0.0.1 -Port 33889`。 但发现实际情况为:无论远程的工作站是否在线,只要 frpc 启动并成功连接 frps 的情况下,网络检测结果永远为在线。 预想的结果是只有当远程工作站在线的情况下才为 True,否则为 False。 不知道这是否是 frp 的设计特性导致? 不知道是否有什么可靠的方法、设定可以检测到实际客户端的在线状态? 谢谢! ### Describe alternatives you've considered _No response_ ### Affected area - [ ] Docs - [ ] Installation - [ ] Performance and Scalability - [ ] Security - [X] User Experience - [ ] Test and Release - [ ] Developer Infrastructure - [ ] Client Plugin - [ ] Server Plugin - [ ] Extensions - [ ] Others
Author
Owner

@fatedier commented on GitHub (Aug 28, 2023):

目前只在有新的连接来的时候,才会去尝试和 stcp server 建立连接,如果 stcp server 不可用,连接会被立即断开。

这种方式的成本最低,不需要维护 stcp visitor 和 stcp server 的状态。

你可以尝试检测连接建立后没有立即断开,来作为判断依据。

<!-- gh-comment-id:1694923875 --> @fatedier commented on GitHub (Aug 28, 2023): 目前只在有新的连接来的时候,才会去尝试和 stcp server 建立连接,如果 stcp server 不可用,连接会被立即断开。 这种方式的成本最低,不需要维护 stcp visitor 和 stcp server 的状态。 你可以尝试检测连接建立后没有立即断开,来作为判断依据。
Author
Owner

@Sharuru commented on GitHub (Aug 28, 2023):

目前只在有新的连接来的时候,才会去尝试和 stcp server 建立连接,如果 stcp server 不可用,连接会被立即断开。

这种方式的成本最低,不需要维护 stcp visitor 和 stcp server 的状态。

你可以尝试检测连接建立后没有立即断开,来作为判断依据。

明白了,感谢提供思路。

查了下微软相关的文档,mstsc 没有太多事件可以监听,最后改换了实现方式,用 RPA 来判断远程桌面是否联通来 workaround 了。

<!-- gh-comment-id:1695357809 --> @Sharuru commented on GitHub (Aug 28, 2023): > 目前只在有新的连接来的时候,才会去尝试和 stcp server 建立连接,如果 stcp server 不可用,连接会被立即断开。 > > 这种方式的成本最低,不需要维护 stcp visitor 和 stcp server 的状态。 > > 你可以尝试检测连接建立后没有立即断开,来作为判断依据。 明白了,感谢提供思路。 查了下微软相关的文档,mstsc 没有太多事件可以监听,最后改换了实现方式,用 RPA 来判断远程桌面是否联通来 workaround 了。
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#2862
No description provided.