Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication ZeroMQ:如何获取已连接客户端的地址?_Authentication_Client_Authorization_Identity_Zeromq - Fatal编程技术网

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

Authentication ZeroMQ:如何获取已连接客户端的地址?,authentication,client,authorization,identity,zeromq,Authentication,Client,Authorization,Identity,Zeromq,当我使用常规UDP套接字时,我从recvfrom()获取远程客户端的地址。 当我使用常规TCP套接字时,我会在调用accept()时获取远程客户端的地址。 然而,在ZeroMQ中,似乎没有获得远程客户端地址的好方法。 如果我想用它来接受来自internet上通常不受信任的第三方的请求,那么这是非常不方便的,因为例如,我无法筛选允许在特定发布服务器套接字上订阅的远程节点 我错过了什么?ZMQ真的只适合在防火墙保护的LAN/VLAN上使用吗?例如,每条消息上的一个简单的“源地址”元数据字段将非常有用

当我使用常规UDP套接字时,我从recvfrom()获取远程客户端的地址。 当我使用常规TCP套接字时,我会在调用accept()时获取远程客户端的地址。 然而,在ZeroMQ中,似乎没有获得远程客户端地址的好方法。 如果我想用它来接受来自internet上通常不受信任的第三方的请求,那么这是非常不方便的,因为例如,我无法筛选允许在特定发布服务器套接字上订阅的远程节点

我错过了什么?ZMQ真的只适合在防火墙保护的LAN/VLAN上使用吗?例如,每条消息上的一个简单的“源地址”元数据字段将非常有用,注册一个允许或不允许绑定套接字上连接的“网守”的方法也非常有用


请注意,套接字上的“IDENTITY”选项并不能解决此问题,因为任何来源都可以对其进行欺骗。相比之下,如果远程实体想要返回任何数据包作为响应,则源IP/端口不是伪造的。

老问题,但让我给出我的输入,因为我也遇到了这个问题

我的客户通过他们的曲线密钥进行身份验证(和加密)。然而,似乎一旦客户机的公钥添加到服务器(zmq.AuthCurveAdd),所有的事情都会在幕后完成,并且对开发人员隐藏。也就是说,我知道我的客户机被授权访问服务器(因为他们有服务器信任的密钥对),但我不知道谁是谁。正如您前面提到的,身份也存在同样的问题。我必须相信我的客户就是他们说的那样

我维护密钥身份验证/加密以及标识,但添加了另一层以实现更好的身份验证(将给定消息绑定到特定客户机):客户机将其标识存储在配置文件中,服务器将其存储在密码哈希旁边的SQL表中。客户机发送每个消息的标识(当然)以及密码的散列。这很简单,但很有效


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

如果你需要过滤/阻止不受信任的方,请使用防火墙或路由器设备;避免将该逻辑放在应用程序代码中。Zeromq不提供物理客户端IP,请参阅。这意味着Zeromq不能用作分布式应用程序的传输。我无法使用ZeroMQ作为消息传递结构来编写IM客户端或游戏服务器。是的,您可以,聊天/游戏客户端首先连接到中间件,在中间件上获得唯一的客户端id(您可以设置此id),ZeroMQ可以使用这些id通过路由器套接字将消息路由到各个客户端,您可以在ZeroMQ聊天服务器中找到示例;您也可以在没有服务器的情况下进行搜索。套接字的唯一客户端ID仅记录在请求/响应套接字中。它也没有提供我收到的实际消息,因此我不知道如何将它与身份验证机制联系起来。