Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. function IP() {
  2. var crypto = require('crypto');
  3.  
  4. this.cloak = function(ip, parts) {
  5. ip = ip.split('.');
  6.  
  7. while(ip.length < 4) {
  8. ip.push('*');
  9. }
  10.  
  11. if(parts === undefined) {
  12. parts = 0;
  13. }
  14. else {
  15. parts = ip.length - parts;
  16. }
  17.  
  18. var accumulator = '';
  19.  
  20. return ip
  21. .map(function (segment, i) {
  22. if(i < parts || segment === '*') {
  23. return segment;
  24. }
  25.  
  26. var part = iphash(accumulator + segment + i, 3);
  27. accumulator += segment;
  28. return part;
  29. })
  30. .join('.');
  31. }
  32.  
  33. this.uncloak = function(ip, parts)
  34. {
  35. ip = ip.split('.');
  36.  
  37. if(parts === undefined) {
  38. for(parts = 0; parts < ip.length && !isCloaked(ip[parts]); ++parts);
  39. }
  40. else {
  41. parts = Math.max(ip.length - parts, 0);
  42. }
  43.  
  44. return doUncloak(ip, ip.slice(), '', parts, []);
  45.  
  46. /*
  47. var parts = ip.split('.');
  48. var ret = [];
  49. parts[0] = parseInt(parts[0]);
  50. parts[1] = parseInt(parts[1]);
  51. for(parts[2] = 0; parts[2] < 256; ++parts[2])
  52. {
  53. for(parts[3] = 0; parts[3] < 256; ++parts[3])
  54. {
  55. var test = parts.join('.');
  56. if(this.cloakIP(test) === ip)
  57. {
  58. ret.push(test);
  59. }
  60. }
  61. process.stdout.write('*');
  62. }
  63. process.stdout.write('\n');
  64. return ret;
  65. */
  66. }
  67.  
  68. function iphash(data, len) {
  69. var md5 = crypto.createHash('md5');
  70. md5.update(data);
  71. return md5.digest('base64').substring(0, len);
  72. }
  73.  
  74. function isCloaked(part) {
  75. return /[^0-9]/.test(part) || parseInt(part) >= 256;
  76. }
  77.  
  78. function doUncloak(ip, parts, accumulator, i, ret) {
  79. if(i >= ip.length) {
  80. ret.push(parts.join('.'));
  81. return ret;
  82. }
  83. var tmp;
  84. for(var j = 0; j < 256; ++j) {
  85. tmp = iphash(accumulator.concat(j, i), 3);
  86. if(tmp === ip[i]) {
  87. parts[i] = j;
  88. doUncloak(ip, parts, accumulator.concat(j), i + 1, ret);
  89. }
  90. }
  91. return ret;
  92. }
  93.  
  94. return this;
  95. }
  96.  
  97. module.exports = new IP();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement