【问题标题】:Terminal Services - can a user's physical location be identified?终端服务 - 可以识别用户的物理位置吗?
【发布时间】:2012-01-16 14:52:57
【问题描述】:

在使用终端服务时(可能带有或不带有 Citrix 插件),是否可以识别用户的物理位置?

客户端工作站硬件是混合的 - 有时是 Windows pc,有时是瘦客户端单元(例如 Wyse 等)。

我们的应用需要根据用户所在的位置来改变业务功能。例如,遵守不同的州法律或现金处理(现金抽屉可供分行或商店的任何工作站使用,但不能从其他分行或商店访问)。

也不能依赖用户的登录来识别他们的位置 - 虽然大多数用户只会在一个位置工作,但有些用户确实会从一个位置到另一个位置。出于安全和审核原因,不能为每个位置使用不同的登录方式。

除了询问用户他们在哪里(肯定是一个有问题的解决方案)之外,是否有任何 API、系统支持或技术可以满足此类需求?

谢谢!

【问题讨论】:

    标签: terminal-services thin-client


    【解决方案1】:

    在远程桌面服务器上,您可以根据 IP 地址识别用户的大致物理位置。您可以使用带有信息类 WinStationRemoteAddress 的 Win32 API 函数 WinStationQueryInformationW 获取与会话关联的远程 IP 地址。如果您使用的是 .NET 语言,则可以使用 Cassia library——远程 IP 端点公开为 ITerminalServicesSession.RemoteEndPoint。不要将远程 IP 地址与 RDS API 中可用的客户端报告的 IP 地址混淆——例如,如果客户端位于 NAT 路由器后面,客户端报告的 IP 将不会返回客户端的公共 IP——它将返回一个私有 IP 地址。

    获得客户端的 IP 地址后,您可以使用类似 GeoIP 的 API 来查找客户端的物理位置。

    【讨论】:

    • 好信息 - 谢谢!不幸的是,这不会为我们的情况提供解决方案。据我了解,这将提供一个分辨率最多为几英里的位置。本质上,我们需要知道确切的建筑物。另外,我没有在问题中说明,但客户端机器不是面向 Internet 的——它们和服务器在我们客户端的内部 WAN 上运行,所以我不相信 GeoIP 可以提供任何分辨率数据。但是感谢您抽出宝贵的时间来回答!
    • 我明白了。在这种情况下,您可以使用我的答案中描述的方法来获取客户端的 IP 地址,但是您需要编写一些特定于环境的代码来将其映射到特定位置。您可能必须根据 IP 子网、反向 DNS 记录或 Active Directory 结构(您可以从会话元数据中获取客户端的计算机名称)对某些内容进行硬编码——但同样,这是非常特定于环境的,所以我我不确定我(或这里的其他人)如何直接帮助你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2011-05-14
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多