Net-Google-SafeBrowsing2
view release on metacpan or search on metacpan
lib/Net/Google/SafeBrowsing2.pm view on Meta::CPAN
package Net::Google::SafeBrowsing2;
use strict;
use warnings;
use Carp;
use LWP::UserAgent;
use URI;
use Digest::SHA qw(sha256);
use List::Util qw(first);
use Text::Trim;
use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex);
use MIME::Base64::URLSafe;
use MIME::Base64;
use String::HexConvert;
use File::Slurp;
use IO::Socket::SSL 'inet4' ;
use Exporter 'import';
our @EXPORT = qw(DATABASE_RESET MAC_ERROR MAC_KEY_ERROR INTERNAL_ERROR SERVER_ERROR NO_UPDATE NO_DATA SUCCESSFUL MALWARE PHISHING);
our $VERSION = '1.13';
BEGIN {
IO::Socket::SSL::set_ctx_defaults(
# verify_mode => Net::SSLeay->VERIFY_PEER(),
SSL_verify_mode => 0,
);
}
=head1 NAME
DEPRECATED. Please use L<Net::Google::SafeBrowsing3> for the Google Safe Browsing v3 API.
Net::Google::SafeBrowsing2 - Perl library for the Google Safe Browsing v2 API. (Google Safe Browsing v1 has been deprecated by Google.)
=head1 SYNOPSIS
use Net::Google::SafeBrowsing2;
use Net::Google::SafeBrowsing2::Sqlite;
my $storage = Net::Google::SafeBrowsing2::Sqlite->new(file => 'google-v2.db');
my $gsb = Net::Google::SafeBrowsing2->new(
key => "my key",
storage => $storage,
);
$gsb->update();
my $match = $gsb->lookup(url => 'http://www.gumblar.cn/');
if ($match eq MALWARE) {
print "http://www.gumblar.cn/ is flagged as a dangerous site\n";
}
$storage->close();
=head1 DESCRIPTION
Net::Google::SafeBrowsing2 implements the Google Safe Browsing v2 API.
The library passes most of the unit tests listed in the API documentation. See the documentation (L<http://code.google.com/apis/safebrowsing/developers_guide_v2.html>) for more details about the failed tests.
The Google Safe Browsing database must be stored and managed locally. L<Net::Google::SafeBrowsing2::Sqlite> uses Sqlite as the storage back-end, L<Net::Google::SafeBrowsing2::MySQL> uses MySQL. Other storage mechanisms (databases, memory, etc.) can b...
You may want to look at "Google Safe Browsing v2: Implementation Notes" (L<http://www.zscaler.com/research/Google%20Safe%20Browsing%20v2%20API.pdf>), a collection of notes and real-world numbers about the API. This is intended for people who want to ...
The source code is available on github at L<https://github.com/juliensobrier/Net-Google-SafeBrowsing2>.
If you do not need to inspect more than 10,000 URLs a day, you can use L<Net::Google::SafeBrowsing2::Lookup> with the Google Safe Browsing v2 Lookup API which does not require to store and maintain a local database.
IMPORTANT: If you start with an empty database, you will need to perform several updates to retrieve all the Google Safe Browsing information. This may require up to 24 hours. This is a limitation of the Google API, not of this module. See "Google Sa...
=head1 CONSTANTS
Several constants are exported by this module:
=over 4
=item DATABASE_RESET
Google requested to reset (empty) the local database.
=item MAC_ERROR
lib/Net/Google/SafeBrowsing2.pm view on Meta::CPAN
return '' if (scalar @$numbers == 0);
my $range = $$numbers[0];
my $new_range = 0;
for(my $i = 1; $i < scalar @$numbers; $i++) {
# next if ($$numbers[$i] == $$numbers[$i-1]); # should not happen
if ($$numbers[$i] != $$numbers[$i-1] + 1) {
$range .= $$numbers[$i-1] if ($i > 1 && $new_range == 1);
$range .= ',' . $$numbers[$i];
$new_range = 0
}
elsif ($new_range == 0) {
$range .= "-";
$new_range = 1;
}
}
$range .= $$numbers[scalar @$numbers - 1] if ($new_range == 1);
return $range;
}
=head2 expand_range()
Explode list of ranges (1-3, 5, 7-11) into a list of numbers (1,2,3,5,7,8,9,10,11).
=cut
sub expand_range {
my ($self, %args) = @_;
my $range = $args{range} || return ();
my @list = ();
my @elements = split /,/, $range;
foreach my $data (@elements) {
if ($data =~ /^\d+$/) { # single number
push(@list, $data);
}
elsif ($data =~ /^(\d+)-(\d+)$/) {
my $start = $1;
my $end = $2;
for(my $i = $start; $i <= $end; $i++) {
push(@list, $i);
}
}
}
return @list;
}
=head1 CHANGELOG
=over 4
=item 1.11
Add dependency on IO::Socket::SSL.
Remove dependency on Net::IPAddress.
=item 1.10
Force IPv4 to solve bug on CentOS.
=item 1.09
Use HTTPS to access safebrowsing.clients.google.com/.
=item 1.07
Add C<import_chunks()> feature to import add chunks and sub chunks from a file.
=item 1.05
No code change. Move C<local_lookup> to PRIVATE FUNCTIONS to avoid confusions.
=item 1.04
Introduce L<Net::Google::SafeBrowsing2::Lookup>. Remind people that Google Safe Browsing v1 has been deprecated by Google.
=item 1.03
The source code is available on github at L<https://github.com/juliensobrier/Net-Google-SafeBrowsing2>.
=item 1.02
Fix uninitialized $self->{errors} variable
=item 1.01
Use String::HexConvert for faster hex_to_ascii.
=item 1.0
Separate the error output from the debug output.
=item 0.9
Fix bug with local whitelisting (sub chunks). Fix the parsing of full hashes.
=item 0.8
Reduce the number of full hash requests.
=item 0.7
Add local_lookup to perform a lookup against the local database only. This function should be used for debugging purpose only.
Small code optimizations.
=item 0.6
Handle local database reset.
=item 0.5
Update documentation.
=item 0.4
( run in 1.614 second using v1.01-cache-2.11-cpan-39bf76dae61 )