← All posts tagged IP

freefd

Пишут удивительные люди:

...В связи с исчерпанием IPv4-адресов, арендуем большие блоки IP-адресов от /19(8190) до /16(65534) для использования под легальные проекты на длительный срок...Готовы брать в аренду по 6-7 рублей в месяц за 1 IP-адрес.
За сеть /19 — до 57330 рублей в месяц.
За сеть /16 — до 458000 рублей в месяц.

В Казани какая-то своя атмосфера? Нам в прошлом году даже по $3 отказались большой блок продать и соглашались только на $7-$9.

freefd

собрал себе функцию определения принадлежности IP к типам public, private или reserved, без каких-либо модулей.

my %IPv4ranges = (
'00000000' => 'PRIVATE', # 0/8
'00001010' => 'PRIVATE', # 10/8
'01111111' => 'PRIVATE', # 127.0/8
'101011000001' => 'PRIVATE', # 172.16/12
'1100000010101000' => 'PRIVATE', # 192.168/16
'1010100111111110' => 'RESERVED', # 169.254/16
'110000000000000000000010' => 'RESERVED', # 192.0.2/24
'1110' => 'RESERVED', # 224/4
'11110' => 'RESERVED', # 240/5
'11111' => 'RESERVED', # 248/5
);

sub iptype {
my $ip = shift;
$ip = unpack('B32', pack('C4C4C4C4', split(/\./, $ip)));
foreach (sort { length($b) <=> length($a) } keys %IPv4ranges) {
return $IPv4ranges{$_} if $ip =~ m/^$_/;
}
return 'PUBLIC';
}

print ip_iptype('192.0.2.1');

freefd

на память:
use strict; use warnings;

use Socket qw{ inet_aton inet_ntoa };

sub ip_to_num { unpack( 'N', inet_aton( shift )); }
sub ip_to_str { inet_ntoa( pack( 'N', shift )); }
sub ip_plus { ip_to_str( ip_to_num( $_[0] ) + $_[1] ); }
sub ip_minus { ip_plus( $_[0], -$_[1] ); }

my $dotted_quad = '10.198.9.2';
print ip_plus( $dotted_quad, 290 ), "\n";
print ip_minus( $dotted_quad, 3 ), "\n";

__END__

10.198.10.36
10.198.8.255