Guest User

Untitled

a guest
Jun 22nd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. const ip4ToInt = ip =>
  2. ip.split('.').reduce((int, oct) => (int << 8) + parseInt(oct, 10), 0) >>> 0;
  3.  
  4. const isIp4InCidr = ip => cidr => {
  5. const [range, bits = 32] = cidr.split('/');
  6. const mask = ~(2 ** (32 - bits) - 1);
  7. return (ip4ToInt(ip) & mask) === (ip4ToInt(range) & mask);
  8. };
  9.  
  10. const isIp4InCidrs = (ip, cidrs) => cidrs.some(isIp4InCidr(ip));
  11.  
  12. // isIp4InCidrs('192.168.1.5', ['10.10.0.0/16', '192.168.1.1/24']); // true
  13.  
  14.  
  15. const intToIp4 = int =>
  16. [(int >>> 24) & 0xFF, (int >>> 16) & 0xFF,
  17. (int >>> 8) & 0xFF, int & 0xFF].join('.');
  18.  
  19. const calculateCidrRange = cidr => {
  20. const [range, bits = 32] = cidr.split('/');
  21. const mask = ~(2 ** (32 - bits) - 1);
  22. return [intToIp4(ip4ToInt(range) & mask), intToIp4(ip4ToInt(range) | ~mask)];
  23. };
  24.  
  25. calculateCidrRange('192.168.1.0/24'); // ["192.168.1.0", "192.168.1.255"]
  26.  
  27.  
  28. const intToBin = int =>
  29. (int >>> 0).toString(2).padStart(32, 0).match(/.{1,8}/g).join('.');
  30.  
  31. intToBin(ip4ToInt('192.168.1.1')); // 11000000.10101000.00000001.00000001
Add Comment
Please, Sign In to add comment