我们的应用程序使用 JeroMQ 0.4.3 在客户端应用程序和 API 之间发送消息。(使用 ZAuth 的曲线加密)。
我们从ROUTER
代理(MDP 模式)中的套接字获取客户端消息。
在代理中接收消息时找到发件人 IP 的最佳方法是什么?
在 ZeroMQ 中,似乎可以使用ZMQ_SRCFD
消息选项,getpeername()
但我还没有找到将其转换为 JeroMQ 的方法。
更新的 ZeroMQ API 确实定义ZMQ_SRCFD
了消息可能携带的属性。
事实 A)
一个主要是不确定,远程系统使用什么 ZeroMQ API 版本(2.x ~ 3.x ~ 4.2.2 ~ ?截至 EoY-2017),除非某些确实严格且具有入侵鲁棒性的版本执行政策落实到位,积极主动。
事实 B)
最近的 ZeroMQ API 为tcp://
传输类定义了这个:
ZMQ_SRCFD
返回从中读取消息的套接字的文件描述符。这允许应用程序通过 检索远程端点getpeername(2)
。请注意,相应的套接字可能已经关闭,甚至可以重用。目前仅针对 TCP 套接字实现。
事实 C)
任何语言包装器或绑定,包括一个人首选的 JeroMQ 或其他,都必须自己覆盖所选范围(无论是完全还是部分范围覆盖)。
如果在某些特定语言端口/绑定版本中缺少某个功能,那么最好的下一步是评估扩展已发布源代码的可行性,以便通过(重新)实现语言端口/绑定来涵盖所需的功能,以便以最好地满足 ZeroMQ 已发布规范指定的所需 API 功能。
事实 D)
在 C) 根据 B) 下表达的主要不确定性变得不可行或不完整的情况下,人们仍然可以继续实施自己的高级 IP 地址节点-(重新)-发现策略,基于任何合适的安全问题的等级,甚至从一个 { 天真的自我声明 | 两步IP验证| ... | 一种无需信任的 IP 验证 } 协议,如果需要的话。