PRX IP Filter
Description
Utility for matching client IP addresses against a list of IP ranges.
This list can be built manually (by adding CIDRs and IP ranges) or loading from an S3 location.
Install
Just npm install --save prx-ip-filter
.
Usage
const PrxIpFilter = require('prx-ip-filter');const filter = new PrxIpFilter(); filter.addRange('1.1.1.1', '1.1.255.255', 'Some Datacenter');filter.addRange('9:9:9:9::', '9:9:9:9:ffff:ffff:ffff:ffff', 'Something Else'); console.log(filter.check('1.1.99.99'));# "Some Datacenter"console.log(filter.check('9:9:9:9:abcd::'));# "Something Else"console.log(filter.check('1.2.1.1'));# null
You can also serialize the current list of IP ranges to JSON, and load it from JSON:
filter.addRange('1.1.1.1', '1.1.255.255', 'Some Datacenter');const json = JSON.stringify(filter);console.log(json);# "{"names":["Some Datacenter"],"ipv4":["001.001.001.001","001.001.255.255",0],"ipv6":[]}" const filter2 = PrxIpFilter.fromJSON(json);console.log(filter2.names);# ["Some Datacenter"] await filter.toFile('/path/to/filters.json');const filter3 = await PrxIpFilter.fromFile('/path/to/filters.json');console.log(filter3.names);# ["Some Datacenter"]
Additionally, you can load load filters from 1 or more CSV files in S3, where
each line has the format ipLow,ipHigh,name
or cidr,name
:
const filter = await PrxIpFilter.fromS3CSV('my-bucket-name', 'some-prefix-path');
Development
Tests are run by Jest, and located in the *.test.js
files. Write good tests.
License
Contributing
- Fork it
- Create your feature branch (git checkout -b feat/my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Push to the branch (git push origin feat/my-new-feature)
- Create new Pull Request