Tôi có danh sách các IP:
238.51.208.96/28
238.51.209.180-199
238.51.209.100-109
238.51.213.2-254
...
Làm thế nào tôi có thể dễ dàng phân tích chúng? Tôi cần IP đầu tiên và cuối cùng từ phạm vi. Đối với dòng đầu tiên tôi có thể sử dụng Net :: Netmask CPAN module, nhưng tôi có thể làm gì với những dòng khác?Làm cách nào để phân tích cú pháp địa chỉ IP và dải địa chỉ với Perl?
Trả lời
Hãy thử Net::IP mô-đun
Nếu mô hình thứ hai không hỗ trợ, bạn có thể cần một số thay đổi ip trong tiến như
238.51.209.180-199
để
238.51.209.180 - 238.51.209.199
bằng cách sử dụng một số regex, cho ví dụ:
$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/gm;
Full kịch bản:
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";
Bạn có thể phù hợp với địa chỉ IP bằng cách sử dụng gói Regexp::Common::net, và vận dụng chúng (và nhận netmasks vv) với bất kỳ số lượng mô-đun trên CPAN, bao gồm Network::IPv4Addr, NetAddr::IP và Net::CIDR.
Tôi mong muốn sử dụng smt như thế này: # Kiểm tra, chúng tôi có định dạng phạm vi nào? \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 ") || chết, 'đầu ra là' Chết tại ./andrey-zentavr.pl dòng 5.' –
@Kinopiko - thêm một cách giải quyết. – YOU
Tôi đã chỉnh sửa regex của bạn và nó hoạt động ngay bây giờ. –