所以我使用localtunnel
通过互联网公开我的端口,但我只想让与服务器在同一网络上的设备访问服务器。
我正在使用express-ip-filter
来过滤掉不同网络上的任何内容。我尝试了一些事情:首先我尝试使用192.168.1.0/24
作为唯一可以访问该网站的ips,但这不起作用,因为它没有让任何东西进入。我接着尝试使用我得到的ip WhatsMyIp,但不会让任何设备进入。然后我发现express-ip-filter
会发出一条消息,说某个ip不被允许,并且在每台设备上,独立于它所连接的网络上,地址是127.0.0.1
。我尝试通过仅允许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'))
答案 0 :(得分:0)
根据我对localtunnel
的有限理解,似乎代理用户通过localtunnel软件向您发出的请求,这会导致所有用户拥有相同的IP。在外行人看来:
localtunnel
localtunnel
复制用户请求并将其发送到您的计算机localtunnel
,因为如果localtunnel
模仿其他人的IP,那就非常困难。< / LI>
醇>
如果您只希望同一网络上的设备进行连接,为什么要使用localtunnel
,如果您只想访问另一台机器,则不需要进行任何端口转发或DNS设置本地网络。
如果你真的需要隧道连接那么有一个解决方案,而不是localtunnel(据我所知,不使用转发头,虽然如果有人知道他们是否做错了改变我的答案)但使用{{ 3}}而不是完全相同的东西,但也在每个请求中发送一点额外的数据,告诉应用程序客户端的实际IP是什么。
ngrok http -subdomain=(the subdomain you want) 80
编辑应用程序代码以查找真实客户端IP
var findProxyIP = function(req) {
var realIP = req.header('x-forwarded-for');
return realIP;
}
app.use(ipfilter(ips, {
mode: "allow",
detectIP: findProxyIP
}));
与localtunnel相比,ngrok更复杂,功能更多,但它是免费增值软件,其免费计划非常有限。