为什么可以't我得到连接客户端's的ip地址在我的服务器上运行Node.js+Openshift托管的W
Why can't I get the connecting client's ip address on my server running Node.js + Websocket hosted by Openshift (Using WebSocket-Node)
我使用的是openshift托管的Node.js 0.10+WebSocket Node(见此处),差不多就是这样,我没有使用express。除了无法获得任何连接客户端的ip地址外,服务器的行为完全符合预期,并出色地处理websocket请求和连接。
我已经做了功课,我知道openshift在反向代理后面,应该咨询x-forwarded-for标头以获得正确的ip。但是,WebSocketRequest.remoteAddress属性(如果存在,则从X-Forwarded-For标头获取其返回的ip)返回OPENSHIFT_NODEJS_ip的值(如rhc-env中所列),该值可能是服务器的ip。此外,我手动浏览了WebSocketRequest.httpRequest对象(它是对原始Node HTTP请求对象的引用),但在那里找不到任何x-forwarded-for标头的踪迹,(尽管我不会假装知道我在那里看到了什么。)
我的服务器还处理标准HTTP请求,当我检查request.headers['x-forwarded-for']时,DO会返回客户端ip,遗憾的是,这无助于通过websocket连接客户端的ip,因为它们不会触发标准HTTP响应。
我一定错过了什么,如果有人能提供任何新的调查途径或狡猾的变通办法,我将不胜感激。
您可以在套接字连接时探测每个客户端的ip地址
您可以使用以下内容:http://jsonip.com/?callback
jsonip.com请求返回以下对象:
{"ip":"XXX.XXX.XXX.XXX","about":"/about","Pro!":"http://getjsonip.com"}
即使你信任客户也不总是最好的方法,
这里有一个探测场景的客户端示例:
socket.on('PROBE', function(){
$.getJSON('http://jsonip.com/?callback=?', function(r){
var myIP = r.ip;
socket.emit('C_IP', myIP);
});
以下是我使用node.js&socket.io@OpenShift
https://stackoverflow.com/a/29285652/2976093
- 使用JS在服务器上运行PHP脚本
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- Meteor如何运行服务器端python脚本
- 保持节点服务器运行”;观看“;让事情发生
- "无法获取/null”;当使用nodejs运行服务器时
- 多人游戏完全在浏览器中运行,服务器仅用于数据库
- 使用c#在Web服务器上运行JavaScript方法
- Meteor发布/订阅无法从服务器文件夹中运行
- 解析JS SDK登录到Node.JS中运行的解析服务器=失败
- 有没有一种方法可以在服务器端页面加载之前在加载时运行javascript
- jQuery插件在本地主机上运行良好,但在web服务器上却与bg镜像混淆
- 如果网站刷新,则阻止 php 调用的 mysql 服务器运行
- 如何通过Web服务器运行python脚本并将结果返回到javascript
- asp:从服务器运行时菜单格式不正确
- node js中服务器运行时的内存状态
- 将PhantomJS作为服务器运行
- JSON数组:OK local但get "Undefined"值从服务器运行时
- Ng-view没有加载模板(没有web服务器运行)
- Node.js在服务器运行时删除路由
- 如何将PhantomJS作为服务器运行并远程调用它