如何识别 NetMQ 传入连接的物理地址?

How to identify the physical address of incoming connections in NetMQ?

router-dealer example for NetMQ中,我们看到客户端可以设置自己的身份。这对于日志记录很有用。但是,如果我只控制服务器(路由器)的代码而不控制客户端(经销商)的代码怎么办?如果某些客户端不愿意以对我的服务器有意义的方式设置身份怎么办?如果客户端没有在消息或身份中明确提供给我,我该如何在我的日志中包含物理地址?

如果你只知道基于 ZeroMQ 的一些其他实现的答案,我会很想听听,但最终我想要一些可以在 NetMQ 中完成的东西。

How to identify the physical address of incoming connections in NetMQ ?

好吧,似乎没有魔法可以做到这一点:

虽然处于 v4.2+ 之前状态的 API-s 已经为设置身份启用了一些帮助,这使得应用程序级代码有机会了解某些消息'"origin"(所有较低级别的详细信息和限制的参考文档)并非所有可扩展的正式通信模式原型都可以使用它。

接下来,整个马戏团也依赖于将这样的 "helper" 一条信息包含( and/or 不包含)到消息流处理中的自由意志。因此,身份框架的概念是一种弱原则,您的应用程序级代码只能希望并祈祷收到一些,但主要不保证收到任何此类,因为零远程执行政策似乎在 2018/Q2 API v4.2 下可用。


How do I include the physical address in my logs, when the client doesn't specifically give it to me in the message or identity?

[法律方面]相信有完全合法的理由这样做,
对人权的基本尊重
提供一个人的IDENTITY与否
是要在这里申请的,不是吗?

除了 GDPR 和其他隐私保护法律框架之外,这部分即使被评估为技术挑战也更加困难,至少截至 2018 年第 2 季度,有许多传输 classes 可用:
这些:{ inproc:// | ipc:// | tcp:// | pgm:// | epgm:// | vmci:// },所以任何一方都很难配备一些魔法嗅探器来检测任何/所有上述所需的软知识映射(实际发送或未发送发送身份字符串)与实际的传输-class 解码器进行嗅探。

其次,并非所有连接都可以轻松嗅探,是吗?


ultimately I want something that can be accomplished in NetMQ.

根据您的说法,您的控制域通常不包含远程(客户端)代理 除了巨大的 MITM/intel 间谍活动外,没什么可做的-grade 努力开发一个全传输-classes,涵盖对可能的多对多连接网格的已经复杂的拓扑进行隐私渗透筛选,但对任何"faked"具有更高的鲁棒性身份和许多其他问题,使这些努力具有实用性、普遍性、不引人注意,但又足够稳健,从而使它们变得有意义
(
如果还不知道,请注意——如 [] 部分所述——one ZeroMQ-Context() -instance 可能有 many zmq.Socket()-instances,每个实例可能有 many-AccessPoint-s,每个可能使用一个不同传输-class并可能.bind()/.connect()-ed到许多不同的远程对等访问点-s,所以确实是一团糟 的拓扑形态 :o)
)