我是群里的jocke
通过CDN(nginx) 转发到workerman chat 获取的ip 都是 CDN 的ip,想获取真是的用户ip ,想改造的话,该从哪个地方入手,尝试着修改了 Workerman\Protocols\Websocket.php 增加了 parseHttpHeader 方法里面对 $buffer的解析,但在events中却提示未定义;
奥总给的回答是
js获取到了,然后websocket自己发给wm
方法不错,不过,这样的话,IP,就可以伪造了
=================以下是Websocket.php接到的header的$buffer================
GET / HTTP/1.1
Host: ws.xxxx.com
X-Real-IP: 116.235.214.218
X-Forwarded-For: 116.235.214.218
Connection: close
Pragma: no-cache
Cache-Control: no-cache
Origin: http@//192.168.0.196
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Sec-WebSocket-Key: wY4G04lTDKqW8nQkOV50dA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
注:Origin: http@//192.168.0.196 @换成: 我的权限不让发站外链接
==========================events内获取到的$_SERVER============================
array(5) {
=>
string(10) "59.56.79.2"
=>
int(8293)
=>
string(9) "127.0.0.1"
=>
int(80)
=>
string(20) "7f00000108fd00000001"
}
因为cdn 层是服务商那边提供,没办法再做其他调整,所以想从wm 中入手,events内想获取到连接带过来的真实ip
先到官网重新下载一份代码,新版本支持了 onWebSocketConnect时设置session的特性。
然后在
start_gateway.php
中增加以下代码然后就可以在Events.php中直接通过
$_SESSION
得到客户端实际ip了哪个版本开始支持的?我昨天git 下载的。3.3.4版本
一个小时前给你加的特性
万分感谢!
不客气