仅允许同一网络上的计算机使用Express ip筛选器



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

我正在使用express-ip-filter来过滤掉不同网络上的任何内容。我尝试了几件事:首先,我尝试使用192.168.1.0/24作为唯一可以访问该网站的ip,但这不起作用,因为它不允许任何东西进入。然后我尝试使用我从WhatsMyIp获得的ip,但是它不会允许任何设备进入。然后,我发现express-ip-filter吐出一条消息,说某个ip是不允许的,并且在每个设备上,都独立于它所连接的网络,地址是CCD_ 5。我试着只允许127.0.0.1进行确认,然后每个设备都可以访问服务器。为什么ip过滤器只得到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'))

根据我对localtunnel的有限理解,它似乎通过localtunnel软件代理用户向您发出的请求,从而使所有用户都拥有相同的IP。用外行的话说:

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

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

如果你真的需要隧道连接,那么有一个解决方案,不是使用localtunnel(据我所知,它不用于涉水头,尽管如果有人知道他们是否会改变我的答案),而是使用https://ngrok.com相反,它做完全相同的事情,但也在每个请求中发送一点额外的数据,告诉应用程序客户端的实际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相比有更多的功能,然而,它是免费的增值软件,其免费计划非常有限。

相关内容

  • 没有找到相关文章

最新更新