通过 TCP 使用 JeroMQ,有没有办法获取发件人的 IP?

Using JeroMQ over TCP, is there a way to get a sender's IP?

我们的应用程序使用 JeroMQ 0.4.3 在客户端应用程序和 API 之间发送消息。 (使用 ZAuth 的曲线加密)。

我们正在从代理(MDP 模式)中的 ROUTER 套接字获取客户端消息。

在代理中接收消息时查找发件人 IP 的最佳方法是什么?

在 ZeroMQ 中,似乎可以使用 ZMQ_SRCFD 消息选项和 getpeername() 但我还没有找到将其转换为 JeroMQ 的方法。

最近的 ZeroMQ API 确实定义了 ZMQ_SRCFD 属性 消息可以携带。

事实 A)
主要是不确定,什么 ZeroMQ API 版本( 2.x ~ 3.x ~ 4.2.2 ~ ? as of EoY-2017 )远程系统使用,除非一些确实严格且入侵强大的版本执行策略已到位并处于活动状态。

事实 B)
最近的 ZeroMQ API 为 tcp:// transport-class 定义了这个:

ZMQ_SRCFD
Returns the file descriptor of the socket the message was read from. This allows application to retrieve the remote endpoint via getpeername(2). Be aware that the respective socket might be closed already, reused even. Currently only implemented for TCP sockets.

事实 C)
任何语言包装器或绑定,包括首选的 JeroMQ 或其他语言,都必须自己覆盖选定的范围(无论是完整范围还是部分范围覆盖)。

如果某个特定语言 port/binding 版本缺少某个功能,下一步最好是评估扩展已发布源代码的可行性,以便通过(重新)-实施语言 port/binding 以最好地满足 ZeroMQ 发布规范指定的所需 API 功能。

事实 D)
在 C) 根据 B) 中表达的主要不确定性变得不可行或不完整的情况下,人们可能仍然会继续实施自己的高级 IP 地址节点-(重新)-发现策略,基于任何合适的安全等级-关注,甚至从一个{幼稚的自我声明|两步 IP 验证 | ... |一种无需信任的 IP 验证 }-协议,如果需要的话。