【问题标题】:Only allow computers on the same network using Express-ip-filter仅允许同一网络上的计算机使用 Express-ip-filter
【发布时间】:2018-04-09 19:56:55
【问题描述】:

所以我使用localtunnel 在互联网上公开我的端口,但我只想让与服务器位于同一网络上的设备访问服务器。

我正在使用express-ip-filter 过滤掉其他网络上的任何内容。我尝试了一些事情:首先我尝试使用 192.168.1.0/24 作为唯一可以访问该网站的 ip,但这不起作用,因为它没有让任何东西进入。然后我尝试使用从 WhatsMyIp 获得的 ip,但这不会让任何设备进入。然后我发现express-ip-filter 吐出一条消息说不允许某个 ip 并且在每台设备上,独立于它所连接的网络上,地址是 @987654325 @。我尝试通过只允许127.0.0.1 进行确认,然后每个设备都可以访问服务器。为什么 ip-filter 只能获取 127.0.0.1 作为 ip?这是我的代码作为参考:

// Init dependencies 
var express = require('express'),
    ipfilter = require('express-ipfilter').IpFilter

app = express()

// Blacklist the following IPs 
var ips = ['192.168.1.0/24']

// Create the server 
app.use(ipfilter(ips, { mode: "allow" }))
app.get('/', function (req, res) {
    res.send('Hi')
})

app.listen(8080, () => console.log('Up'))

【问题讨论】:

    标签: javascript node.js express ip localtunnel


    【解决方案1】:

    根据我对localtunnel 的有限理解,它似乎通过localtunnel 软件代理用户请求,导致所有用户拥有相同的IP。通俗地说:

    1. 用户通过localtunnel 连接到您的站点
    2. localtunnel 复制用户请求并将其发送到您的计算机
    3. 您的应用程序收到了请求,但看起来所有流量都来自 localtunnel,因为 localtunnel 模仿别人的 IP 是非常困难的,如果不是不可能的话。

    如果您只想连接同一网络上的设备,为什么要使用localtunnel,如果您只想访问同一本地网络上的另一台机器,则无需进行任何端口转发或 DNS 设置。

    如果您确实需要隧道连接,那么有一个解决方案,而不是使用 localtunnel(据我所知,它不使用转发标头,尽管如果有人知道他们是否会改变我的答案)但使用 @987654321 @ 相反,它做同样的事情,但也在每个请求中发送一点额外的数据,告诉应用程序客户端的实际 IP 是什么。

    1. 安装 ngrok
    2. 运行ngrok http -subdomain=(the subdomain you want) 80
    3. 编辑您的应用程序代码以找到真正的客户端 IP

      var findProxyIP = function(req) {
        var realIP = req.header('x-forwarded-for');
        return realIP;
      }
      app.use(ipfilter(ips, {
        mode: "allow",
        detectIP: findProxyIP
      }));
      

      ngrok 比 localtunnel 复杂得多,功能也更多,但是,它是免费增值软件,其免费计划非常有限。

    【讨论】:

    • 是的,除了它也不能免费使用大部分功能:P
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2014-04-15
    • 2011-11-04
    相关资源
    最近更新 更多