我的workerman想加入IP白名单功能。请问是要自己在
$worker->onConnect = function ($connection) { print_r("new ip: " . $connection->getRemoteIp()); };
这里补充业务逻辑? 还是workerman本身就提供了设置?
workerman 没有白名单设置,反正我从文档上没看到,这个应该属于业务逻辑。
@https://wenda.workerman.net/people/qq5738912 首先你这个是业务逻辑,需要你自己去处理 如果单纯做IP白名单,可以参考手册中onConnect 注意:onConnect事件仅仅代表客户端与Workerman完成了TCP三次握手,这时客户端还没有发来任何数据,此时除了通过$connection->getRemoteIp()获得对方ip,没有其他可以鉴别客户端的数据或者信息,所以在onConnect事件里无法确认对方是谁。要想知道对方是谁,需要客户端发送鉴权数据,例如某个token或者用户名密码之类,在http://doc.workerman.net/worker/on-message.html里做鉴权。 由于udp是无连接的,所以当使用udp时不会触发onConnect回调,也不会触发onClose回调。
如果还做其他白名单,你需要在onMessage进行处理。
多谢大家的回复,我在那里加上了白名单逻辑了,不过很大的问题就是$connection->getRemoteIp()获取的ip居然和nginx的access.log不一样,也和thinkphp中使用php获取的IP不一样。这是什么回事?我的是h5/websocket来的
这个ip是从stream_socket_recvfrom这个函数获取的,你可以去多验证一下。
workerman 没有白名单设置,反正我从文档上没看到,这个应该属于业务逻辑。
@https://wenda.workerman.net/people/qq5738912
首先你这个是业务逻辑,需要你自己去处理
如果单纯做IP白名单,可以参考手册中onConnect
注意:onConnect事件仅仅代表客户端与Workerman完成了TCP三次握手,这时客户端还没有发来任何数据,此时除了通过$connection->getRemoteIp()获得对方ip,没有其他可以鉴别客户端的数据或者信息,所以在onConnect事件里无法确认对方是谁。要想知道对方是谁,需要客户端发送鉴权数据,例如某个token或者用户名密码之类,在http://doc.workerman.net/worker/on-message.html里做鉴权。
由于udp是无连接的,所以当使用udp时不会触发onConnect回调,也不会触发onClose回调。
如果还做其他白名单,你需要在onMessage进行处理。
多谢大家的回复,我在那里加上了白名单逻辑了,不过很大的问题就是$connection->getRemoteIp()获取的ip居然和nginx的access.log不一样,也和thinkphp中使用php获取的IP不一样。这是什么回事?我的是h5/websocket来的
这个ip是从stream_socket_recvfrom这个函数获取的,你可以去多验证一下。