我有一个像这样的数组
var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.' , '192.168.4.'];
我可以使用自己的函数获取PC Client的IP地址:
getIPClient()
var ipclient = input.getIPClient();
我的问题是如何检查客户端IP是否在我允许的子网内,我尝试使用indexOf()函数,但结果是错误的。 例如:
if IP Client is 192.168.1.115 => allow
if IP Client is 192.168.5.115 => deny.
答案 0 :(得分:10)
您可以使用Array#some
并检查ALLOW_SUBNET
的一部分是否在位置ip
的{{1}}内。
0

function check(ip) {
return ALLOW_SUBNET.some(function (a) { return !ip.indexOf(a); });
}
var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.', '192.168.4.'];
console.log(check('192.168.1.115'));
console.log(check('192.168.5.115'));

答案 1 :(得分:5)
这是一个解决方案。
var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.', '192.168.4.'];
function checkIP(ip) {
var allow = false;
for (var i = 0; i <= ALLOW_SUBNET.length; i++) {
if (ip.indexOf(ALLOW_SUBNET[i]) > -1) {
allow = true;
break;
}
}
return allow;
}
console.log(checkIP('192.168.9.3'));
console.log(checkIP('192.168.1.3'));
&#13;
答案 2 :(得分:3)
您可以尝试这样的事情:
192.168
。你可以使用正则表达式。1-4
。您可以拥有允许值列表。这样,您就可以在希望添加6
的情况下处理案例,同时仍然不允许5
。
var ipRegex = /^192.168/
var ALLOW_SUBNET = [1, 2, 3, 4];
var ALLOW_ADDRESS = [95, 120]
var validIp = ["192.168.1.115", "192.168.2.96"];
var invalidIPs = ["192.167.1.115", "192.168.5.115", "192.168.1.90", "192.168.1.215"];
function validateIP(ip) {
var parts = ip.split(".");
return !(
!ipRegex.test(ip) ||
ALLOW_SUBNET.indexOf(+parts[2]) < 0 ||
!(ALLOW_ADDRESS[0] <= +parts[3] && ALLOW_ADDRESS[1] >= +parts[3])
)
}
validIp.forEach(function(ip) {
console.log(ip, validateIP(ip));
})
invalidIPs.forEach(function(ip) {
console.log(ip, validateIP(ip));
})
答案 3 :(得分:2)
这将完成工作:
allow_deny = function(ipclient) {
var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.','192.168.4.'];
var arr = ipclient.split('.');
arr.pop();
var testedip = arr.join('.') + '.';
return ((ALLOW_SUBNET.indexOf(testedip) > -1) ? 'allow' : 'deny');
}
console.log(allow_deny('192.168.1.115'));
console.log(allow_deny('192.168.5.115'));
这将导致检查您的控制台:
> allow
> deny