-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprepare-data.js
More file actions
64 lines (58 loc) · 1.92 KB
/
prepare-data.js
File metadata and controls
64 lines (58 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// prepare-data.js
//
// Copyright (c) 2011, Robert Kosara <rkosara@me.com>
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
var csv = require('csv');
var path = require('path');
var fs = require('fs');
var CSVFILENAME = 'IpToCountry.csv';
var JSONFILENAME = 'ipccdata.json';
var ipList = [];
function loadData() {
csv()
.from(path.join(__dirname, CSVFILENAME))
.on('record', function(data, index) {
if (data[4] != 'ZZ' && data[0].substr(0, 1) != '#') {
var entry = {
start: parseInt(data[0], 10),
end: parseInt(data[1], 10),
cc: data[4]
};
var previous = ipList[ipList.length-1];
if (ipList.length > 0 && entry.start == previous.end+1 && previous.cc == entry.cc) {
previous.end = entry.end;
} else {
ipList.push(entry);
}
}
})
.on('end', function(count) {
fs.writeFile(JSONFILENAME, JSON.stringify(ipList), function (err) {
if (err) {
console.error(err);
}
});
})
.on('error', function(error) {
console.error(error.message);
});
}
loadData();
console.log('Checking for overlapping IP range blocks ...')
for (var i = 1; i < ipList.length; i++) {
if (ipList[i].start < ipList[i-1].end) {
console.log('block '+ipList[i-1].start+'-'+ipList[i-1].end+'/'+ipList[i-1].cc+' contains '+ipList[i].cc);
}
}