Config-IPFilter
view release on metacpan or search on metacpan
NAME
Config::IPFilter - Simple, rule-based IP filter
Synopsis
use Config::IPFilter;
my $filter = Config::IPFilter->new;
my $rule = $filter->add_rule('89.238.128.0', '89.238.191.255', 127,
'Example range');
# A list of example IPv4 addresses. IPv6 works too.
my @ipv4 = qw[89.238.156.165 89.238.156.169 89.238.156.170 89.238.167.84
89.238.167.86 89.238.167.99];
# Check a list of ips
say sprintf '%15s is %sbanned', $_, $filter->is_banned($_) ? '' : 'not '
for @ipv4;
# Lower the acces level by one pushes it below our ban threshold
$rule->decrease_access_level;
# Check a list of ips
say sprintf '%15s is %sbanned', $_,
$filter->is_banned($_) ? 'now ' : 'still not '
for @ipv4;
You could also load rules directly from an "ipfilter.dat" file.
Description
# Example of a "ipfilter.dat" file
#
# All entered IP ranges will be blocked in both directions. Be careful
# what you enter here. Wrong entries may totally block access to the
# network.
#
# Format:
# IP-Range , Access Level , Description
#
# Access Levels:
# 127 blocked
# >=127 permitted
064.094.089.000 - 064.094.089.255 , 000 , Gator.com
This entry will block the IPs from 064.094.089.000 to 064.094.089.255,
i.e. your code should not connect to any IP in this range.
At the moment only one, read-only access level is implemented; a value
at or below 127 means that addresses in that range are banned.
Methods
Here's a list of 'em...
my $filter = Config::IPFilter->new( )
This builds a new, empty object. There are currently no expected
arguments.
$filter->add_rule( $rule )
This method adds a new range to the in-memory ipfilter.
$filter->add_rule( $lower, $upper, $access_level, $description )
This method coerces the arguments into a new rule which is then added to
the in-memory ipfilter.
$filter->count_rules( )
Returns a tally of all loaded rules.
$filter->is_empty( )
Returns a boolean value indicating whether or not there are any rules
loaded in the ipfilter.
$filter->clear_rules( )
Deletes all rules from the ipfilter.
$filter->load( $path )
Slurps an "ipfilter.dat"-like file and adds the rules found inside to
the ipfilter.
$filter->save( $path )
Stores the in-memory ipfilter to disk.
$filter->is_banned( $ip )
If $ip is banned, the first rule in which it was found below the
threshold is returned.
If not, a false value is returned. Currently, rules with an access_level
at or below 127 are considered banned.
IPv6 Support
The standard ipfilter.dat only supports IPv4 addresses but
Net::BitTorrent's current implementation supports IPv6 as well. Keep
this in mind when storing an ipfilter.dat file to disk.
Notes
This is a very good example of code which should not require Moose. In a
future version, I hope to switch to Moo. ...when "coerce" works to some
degree.
See Also
Emule Project's ipfilter.dat documentation
( run in 0.513 second using v1.01-cache-2.11-cpan-39bf76dae61 )