HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/doc/libgeo-ipfree-perl/examples/ipct2txt.pl
#!/usr/bin/perl

use strict;
use warnings;

require Geo::IPfree;

##################################
# CONVERT IPSCOUNTRY.DAT TO TXT  #
##################################

my $in_fname  = $ARGV[0] || './ipscountry.dat';
my $out_fname = $ARGV[1] || './ips-ascii.txt';

if ( !@ARGV || $ARGV[0] =~ m{^-[h?]}i ) {
    print qq`This tool will convert a Geo::IPfree dat file to ASCII.

    USAGE: perl $0 ./ipscountry.dat ./ips-ascii.txt
`;

    exit;
}

print "Reading ${in_fname} ...\n";

open( my $in_fh, $in_fname ) or die "unable to open '${in_fname}': $!";

my $buffer = '';
sysread( $in_fh, $buffer, 1, length($buffer) ) while $buffer !~ m{##start##$}s;

my @IPS;
while ( sysread( $in_fh, $buffer, 7 ) ) {
    my $country = substr( $buffer, 0, 2 );
    my $iprange = substr( $buffer, 2 );

    my $range   = Geo::IPfree::baseX2dec($iprange);
    my $ip      = Geo::IPfree::nb2ip($range);
    my $ip_prev = Geo::IPfree::nb2ip( $range - 1 );

    push( @IPS, $country, $ip, $ip_prev );
}

close($in_fh);

print "Saving ${out_fname} ...\n";

my @OUT;

for ( my $i = 0; $i <= $#IPS; $i += 3 ) {
    my $ct     = $IPS[$i];
    my $ip     = $IPS[ $i + 1 ];
    my $ipprev = $IPS[ $i - 1 ];

    if ( $ip ne '1.0.0.0.0' && $ct =~ /[\w-]{2}/ ) {
        push( @OUT, "$ct: $ip $ipprev" );
    }
}

open( my $out_fh, '>', $out_fname ) or die "unable to open '${out_fname}': $!";
print $out_fh join( "\n", reverse @OUT );
close($out_fh);

print "Done.\n";