Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function IP() {
- var crypto = require('crypto');
- this.cloak = function(ip, parts) {
- ip = ip.split('.');
- while(ip.length < 4) {
- ip.push('*');
- }
- if(parts === undefined) {
- parts = 0;
- }
- else {
- parts = ip.length - parts;
- }
- var accumulator = '';
- return ip
- .map(function (segment, i) {
- if(i < parts || segment === '*') {
- return segment;
- }
- var part = iphash(accumulator + segment + i, 3);
- accumulator += segment;
- return part;
- })
- .join('.');
- }
- this.uncloak = function(ip, parts)
- {
- ip = ip.split('.');
- if(parts === undefined) {
- for(parts = 0; parts < ip.length && !isCloaked(ip[parts]); ++parts);
- }
- else {
- parts = Math.max(ip.length - parts, 0);
- }
- return doUncloak(ip, ip.slice(), '', parts, []);
- /*
- var parts = ip.split('.');
- var ret = [];
- parts[0] = parseInt(parts[0]);
- parts[1] = parseInt(parts[1]);
- for(parts[2] = 0; parts[2] < 256; ++parts[2])
- {
- for(parts[3] = 0; parts[3] < 256; ++parts[3])
- {
- var test = parts.join('.');
- if(this.cloakIP(test) === ip)
- {
- ret.push(test);
- }
- }
- process.stdout.write('*');
- }
- process.stdout.write('\n');
- return ret;
- */
- }
- function iphash(data, len) {
- var md5 = crypto.createHash('md5');
- md5.update(data);
- return md5.digest('base64').substring(0, len);
- }
- function isCloaked(part) {
- return /[^0-9]/.test(part) || parseInt(part) >= 256;
- }
- function doUncloak(ip, parts, accumulator, i, ret) {
- if(i >= ip.length) {
- ret.push(parts.join('.'));
- return ret;
- }
- var tmp;
- for(var j = 0; j < 256; ++j) {
- tmp = iphash(accumulator.concat(j, i), 3);
- if(tmp === ip[i]) {
- parts[i] = j;
- doUncloak(ip, parts, accumulator.concat(j), i + 1, ret);
- }
- }
- return ret;
- }
- return this;
- }
- module.exports = new IP();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement