##Description
Get geolocation information based on domain or IP address.
Live Demo
##Compatibility
Current version, v0.3.3, passed test on nodejs v0.2.1 ~ 0.2.6, v0.3.0 ~ 0.3.8.
##Architecture
##Data
Befor you can use this package, you need to download or buy some data from www.maxmind.com.
There are three free versions data among with some commercial versions.
Note: This package only support binary data and IP address version 4, not any other formats.
GeoIP ASN Edition Download
GeoIP City Lite Edition Download
GeoIP Country Lite Edition Download.
##Install
npm install geoip
##Usage
###Open the binary data file
The synchronous way:
var data = geoip.open('/path/to/file');
var type = geoip.check(data);
// Return one of these: 'country', 'city', 'org', 'netspeed', 'region';
// Or return null, if not a valid data
if (type === 'country') {
var name = geoip.Country.name_by_addr(data, '8.8.8.8');
if (!name) { // If not fount, return null
console.log('Not found');
} else {
console.log(name); // prints 'United States'
}
}
The asynchronous way:
geoip.filter('/path/to/file', function(err, type, data) {
if (err) {throw err;} // The given path is not a valid data file.
if (type === 'country') { // The data type, in this case it's country
geoip.Country.code_by_domain(data, 'www.sina.com', function(err, code) {
if (err) {throw err;}
if (!code) { // If not found, geoip always return null!
console.log('Not found.');
} else { // Found!
console.log(code); // prints 'CN'
}
});
}
});
###Close the opened data object
geoip.close(data);
##Modules
###Country
// Open the country data file
var country_data = geoip.open('/path/to/GeoIP.dat');
var Country = geoip.Country;
Synchronous methods, network independence
Country.code_by_addr(country_data, '8.8.8.8'); // Return 'US'
Country.name_by_addr(country_data, '8.8.8.8'); // Return 'United States'
Asynchronous methods, depends on node's async-style dns module.
Country.code_by_domain(country_data, 'www.google.com', function(err, code) {
if (err) {throw err;}
console.log(code); // prints 'US'
});
Country.name_by_domain(country_data, 'www.google.com', function(err, name) {
if (err) {throw err;}
console.log(name); // prints 'United States'
});
//Close the opened file.
geoip.close(country_data);
###City
// Open the GeoLiteCity.dat file first.
var city_data = geoip.open('/path/to/GeoLiteCity.dat');
var City = geoip.City;
Synchronous method
City.record_by_addr(city_data, '8.8.8.8');
// Return an object of city information
// {
// "country_code":"US",
// "country_code3":"USA",
// "country_name":"United States",
// "continet_code":"NA",
// "region":"CA",
// "city":"Mountain View",
// "postal_code":"94043",
// "latitude":37.41919999999999,
// "longitude":-122.0574,
// "dma_code":807,
// "metro_code":807,
// "area_code":650
// }
Asynchronous method
City.record_by_domain(city_data, 'www.google.com', function(err, reord) {
if (err) {throw err;}
var keys = Object.keys(record);
keys.forEach(function(k) {
console.log(k + ':' + record[k]); // Same as record_by_addr
});
});
geoip.close(city_data);
###Organization
####Get Organization Information
// Open the GeoIPOrg.dat first.
var org_data = geoip.open('/path/to/GeoIPOrg.dat');
var Org = geoip.Org;
Synchronous method
Org.org_by_addr(org_data, '8.8.8.8');
// Return an array of the names of organization
// [
// 'Genuity',
// 'The United Way',
// 'Education Management Corporation,
// 'International Generating Co. (Intergen)'
// ]
geoip.close(org_data);
Asynchronous method
Org.org_by_domain(org_data, 'www.google.com', function(err, org) {
if (err) {throw err;} // Organization may NOT be Found
org.foreach(function(o) {
console.log(o); // Same result as org_by_addr, if returns
});
});
####Get ASN informatioin
// Open the GeoIPASNum.dat.
var asn_data = geoip.open('/path/to/GeoIPASNum.dat');
Synchronous method
Org.asn_by_addr(asn_data, '8.8.8.8');
// Return an array of asn objects
// [
// { number: 'AS15169', description: 'Google Inc.' },
// { number: 'AS36597', description: 'OmniTI Computer Consulting Inc.' },
// { number: 'AS26471', description: 'Smart City Networks' }
// ]
Asynchronous method
Org.asn_by_domain(asn_data, 'www.google.com', function(err, asn) {
if (err) {throw err;} // ASNumber Not Found
asn.forEach(function(a) {
var keys = object.keys(a);
console.log(a[keys[0]] + ' : ' + a[keys[1]]);
});
});
geoip.close(asn_data);
####Region
// Open the GeoIPRegion.dat first.
var region_data = geoip.open('/path/to/GeoIPRegion.dat');
var Region = geoip.Region;
Synchronous method
Region.region_by_addr(region_data, '8.8.8.8'); // Return 'US,CO'
Asynchronous method
Region.region_by_domain(region_data, 'www.google.com', function(err, region) {
if (err) {throw err;}
console.log(region); // Maybe different from region_by_addr
});
geoip.close(region_data);
####NetSpeed
// Open the GeoIPNetSpeed.dat first.
var netspeed_data = geoip.open('/path/to/GeoIPNetSpeed.dat');
var NetSpeed = geoip.NetSpeed;
Synchronous method
NetSpeed.speed_by_addr(netspeed_data, '8.8.8.8'); // Return 'Dailup'
Asynchronous method
NetSpeed.speed_by_domain(data, 'www.google.com', function(err, speed) {
if (err) {throw err;}
console.log(speed); // Maybe return unknow or different from speed_by_addr
});
geoip.close(netspeed_data);