Ho elenco di indirizzi IP:
238.51.208.96/28
238.51.209.180-199
238.51.209.100-109
238.51.213.2-254
...
Come posso li analizzi facilmente? Ho bisogno del primo e dell'ultimo IP dall'intervallo. Per la prima riga posso usare il modulo CPAN Net: Netmask, ma cosa posso fare con le altre linee?Come posso analizzare gli indirizzi IP e gli intervalli di indirizzi con Perl?
risposta
Prova Net::IP modulo
Se secondo schemi non supporta, potrebbe essere necessario alcune modifiche alle ips degli anticipi come
238.51.209.180-199
a
238.51.209.180 - 238.51.209.199
utilizzando alcuni regex, per esempio,
$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/gm;
script completo:
use warnings;
use strict;
use Net::IP;
my $range = "238.51.209.180-199";
$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/;
my $ip = new Net::IP ($range) || die;
print $ip->ip(), "\n";
print $ip->last_ip(), "\n";
È possibile abbinare gli indirizzi IP utilizzando il pacchetto Regexp::Common::net, e manipolarle (e ottenere maschere di rete, ecc) con qualsiasi numero di moduli su CPAN, tra cui Network::IPv4Addr, NetAddr::IP e Net::CIDR.
Io preferisco usare smt in questo modo: # Controllare, quale formato di intervallo abbiamo? \t if ($ ipline = ~/^ ((?: \ D + \.) {3}) (\ d +) - (\ d +) $ /) { \t \t $ ipline = ~ s/^ ((?: \ d + \.) {3}) (\ d +) - (\ d +) $/$ 1 $ 2 - $ 1 $ 3 /; \t} –
'my $ ip = new Net :: IP (" 238.51.209.180-199 ") || die; l'output è 'Morto a ./andrey-zentavr.pl linea 5.' –
@Kinopiko - aggiunta una soluzione alternativa. – YOU
Ho modificato la tua espressione regolare e ora funziona. –