ZeroMQ:如何获取连接客户端的地址?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZeroMQ:如何获取连接客户端的地址?相关的知识,希望对你有一定的参考价值。

当我使用常规UDP套接字时,我从recvfrom()获取远程客户端的地址。当我使用常规TCP套接字时,我获取远程客户端的地址作为调用accept()的一部分。但是,在ZeroMQ中,似乎没有获得远程客户端地址的好方法。如果我想使用它来接受来自互联网上通常不受信任的第三方的请求,则这非常不方便,因为例如我无法过滤允许在特定发布者套接字上订阅哪些远程节点。

我错过了什么? ZMQ是否真的适合在受防火墙保护的LAN / VLAN上使用?例如,每个消息上的简单“源地址”元数据字段将非常有用,因为注册允许或禁止绑定套接字上的连接的“网守”的某种方式。

请注意,套接字上的“IDENTITY”选项无法解决此问题,因为任何源都可以轻易地进行欺骗。相反,如果远程实体想要响应任何数据包,则源IP /端口是不可欺骗的。

答案

老问题,但让我提出我的意见,因为我也遇到过这个问题。

我的客户端通过其CURVE密钥进行身份验证(并加密)。但是,似乎一旦客户端的公钥被添加到服务器(zmq.AuthCurveAdd),一切都在引擎盖下完成,并且对开发人员是隐藏的。意思是,我知道我的客户端被授权服务器(因为他们有一个服务器信任的密钥对),但我不知道谁是谁。正如您在上面提到的那样,身份也存在同样的问题。我必须相信我的客户就是他们所说的人。

我维护密钥身份验证/加密以及身份,但添加另一层以便更好地进行身份验证(将给定的消息绑定到特定客户端):客户端将其身份存储在配置文件中,服务器将其存储在SQL表中密码哈希。客户端使用每条消息(当然)发送其标识,以及其密码的哈希值。简单,但它的工作原理。

现在我需要做的是使用HMAC /类似的东西,这样我就不仅仅依赖哈希进行身份验证了。但你可以看到我得到的东西(我必须在ZMQ之上设计我自己的解决方案)。

以上是关于ZeroMQ:如何获取连接客户端的地址?的主要内容,如果未能解决你的问题,请参考以下文章

Android如何获取到连接的WIFI无线路由器的所有客户端的MAC地址?

如何在 servlet 中获取客户端的远程地址?

winsock2:服务器端代码调用`accept()`后如何获取已连接客户端的ipv4/ipv6地址

php socket 获取客户端ip地址

如何获得Socket连接客户端的IP地址

使用javascript获取客户端的本地IP地址[重复]