【问题标题】:RPC windows get client IP addressRPC 窗口获取客户端 IP 地址
【发布时间】:2015-07-27 06:15:09
【问题描述】:

我已经阅读了loads of Microsoft documentation regarding RPC programming,但仍然不明白我们如何从 RPC 服务器获取连接客户端的 IP 地址。

我确信有一种简单的方法可以在连接时从服务器获取客户端 IP 地址,但不知道如何做到这一点:/

感谢您的帮助,一个指向文档的简单指针会很棒。

【问题讨论】:

  • MSDN 声明可以使用 RpcBindingServerFromClient() 函数。看我的回答。

标签: c windows rpc


【解决方案1】:

否 - 没有记录的方法来完成此操作。 Windows RPC 通过设计从其客户端抽象网络传输(以及相关的元数据,如网络地址)。

如果你真的需要这样的东西,你可以将它烘焙到你的界面中(例如,实现一个 Connect() 方法,你的客户端提供它的 IP 地址,你可以将它存储在 Context Handle 中)。当然,这假设您可以信任您的客户提供有效的 IP 地址...

【讨论】:

  • 请注意,您可以获取有关用于身份验证的用户帐户的信息。 RPC 服务器通常比客户端 IP 地址更感兴趣。
  • 感谢您的回答;我是 RPC 编程的新手; @HarryJohnston,您是否有指向提供有关这一点的更多信息的任何文档页面的指针?我感觉爬遍了整个网络却没有找到任何可行的例子; Microsoft 文档似乎已经过时了。非常感谢!
  • 我相信你从 RpcImpersonateClient 开始,然后是 OpenThreadToken,然后是 GetTokenInformation。
  • MSDN 声明可以使用 RpcBindingServerFromClient() 函数。看我的回答。
【解决方案2】:

应该可以使用 RpcBindingServerFromClient。 RpcBindingServerFromClient的引用文档:

要查询客户端的地址,应用程序首先调用 RpcBindingServerFromClient 函数来获取部分绑定的服务器绑定句柄。服务器绑定句柄可用于通过调用 RpcBindingToStringBinding 来获取字符串绑定。然后服务器可以调用 RpcStringBindingParse 从字符串绑定中提取客户端的网络地址。

2017 年 5 月 16 日更新: 还有一个未记录的函数 I_RpcServerInqRemoteConnAddress() 很可能返回客户端 IP 地址。但我还没试过。

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2014-12-29
    • 2019-01-14
    • 2013-07-07
    • 2011-05-26
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    相关资源
    最近更新 更多