当我使用常规 UDP 套接字时,我从 recvfrom() 获取远程客户端的地址。当我使用常规 TCP 套接字时,我会在调用 accept() 时获取远程客户端的地址。但是,在 ZeroMQ 中,似乎没有很好的方法来获取远程客户端的地址。如果我想用它来接受来自互联网上通常不受信任的第三方的请求,那么这非常不方便,因为例如我无法过滤允许哪些远程节点订阅特定的发布者套接字。
我错过了什么?ZMQ 真的只适合在受防火墙保护的 LAN/VLAN 上使用吗?例如,每条消息上的简单“源地址”元数据字段将非常有用,就像注册允许或禁止绑定套接字上的连接的“网守”的某种方式一样。
请注意,套接字上的“IDENTITY”选项不能解决这个问题,因为它很容易被任何来源欺骗。相反,如果远程实体想要得到任何数据包作为响应,源 IP/端口是不可欺骗的。