如何使用节点js检查给定的ip是否落在给定的ip范围之间

时间:2017-09-13 14:24:27

标签: javascript node.js ip

请原谅这个琐事问题

给定一组Ip,该集合非常大并且可能会增加 https://github.com/client9/ipcat/blob/master/datacenters.csv#L4

小例子集 - 第一列开始ip第二 - 结束IP范围

enter image description here

我将从请求中获取用户ip。我需要检查ip是否属于这些范围。我如何实现这一目标。

我调查了ip_range_checkrange_check

但他们没有给出给定范围的ip检查。如何在具有最佳性能的节点j中实现这一点。我不想进行详尽的搜索,因为性能是一个高优先级。

到目前为止,请帮助我做一些新的挑战。

2 个答案:

答案 0 :(得分:8)

如果我们将ips转换为简单数字,这很容易:

function IPtoNum(ip){
  return Number(
    ip.split(".")
      .map(d => ("000"+d).substr(-3) )
      .join("")
  );
}

然后我们可以检查某个范围:

 if( IPtoNum(min) < IPtoNum(val) &&    IPtoNum(max) > IPtoNum(val) ) alert("in range");

这也可以应用于表格:

const ranges = [
  ["..41", "192.168.45"],
  ["123.124.125"," 126.124.123"]
];

const ip = "125.12.125";
const inRange = ranges.some(
  ([min,max]) => IPtoNum(min) < IPtoNum(ip) &&   IPtoNum(max) > IPtoNum(ip)
);

答案 1 :(得分:4)

import System.IO

main :: IO ()
main = do
  hSetBuffering stdout NoBuffering
  putStr "Hawk ID: "
  hawkID <- getLine
  let text = ...
  writeFile "hawkID.hs" text

非常确定还有其他方法可以做到这一点。