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 <http://www.emule-project.net/home/perl/help.cgi?l=1&topic_id=142&rm=sho w_topic> Author Sanko Robinson <sanko@cpan.org> - http://sankorobinson.com/ CPAN ID: SANKO License and Legal Copyright (C) 2010, 2011 by Sanko Robinson <sanko@cpan.org> This program is free software; you can redistribute it and/or modify it under the terms of The Artistic License 2.0 <http://www.perlfoundation.org/artistic_license_2_0>. See the LICENSE file included with this distribution or notes on the Artistic License 2.0 <http://www.perlfoundation.org/artistic_2_0_notes> for clarification. When separated from the distribution, all original POD documentation is covered by the Creative Commons Attribution-Share Alike 3.0 License <http://creativecommons.org/licenses/by-sa/3.0/us/legalcode>. See the clarification of the CCA-SA3.0 <http://creativecommons.org/licenses/by-sa/3.0/us/>.