2010-04-13 14 views
5

मैं आईपी की सूची है:

238.51.208.96/28
238.51.209.180-199
238.51.209.100-109
238.51.213.2-254
...

कैसे कर सकते हैं मैं आसानी से उन्हें पार्स? मुझे सीमा से पहले और अंतिम आईपी की जरूरत है। पहली पंक्ति के लिए मैं नेट :: नेटमास्क सीपीएएन मॉड्यूल का उपयोग कर सकता हूं, लेकिन मैं दूसरों की लाइनों के साथ क्या कर सकता हूं?मैं पर्ल के साथ आईपी पते और पता श्रेणियों का विश्लेषण कैसे कर सकता हूं?

उत्तर

4

कोशिश Net::IP मॉड्यूल

तो दूसरा पैटर्न का समर्थन नहीं करता है, तो आप की तरह

238.51.209.180-199 

अग्रिमों में आईपीएस के लिए कुछ परिवर्तन करने के लिए

238.51.209.180 - 238.51.209.199 

करने के लिए कुछ regex का उपयोग करके, के लिए आवश्यकता हो सकती है उदाहरण,

$range =~ s/^((?:\d+\.){3})(\d+)-(\d+)$/$1$2 - $1$3/gm; 

पूर्ण स्क्रिप्ट:

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"; 
+0

'मेरा $ आईपी = नया नेट :: आईपी (" 238.51.20 9 .180-199 ") || मरना; 'आउटपुट' /andrey-zentavr.pl लाइन पर मर गया है 5.' –

+0

@ किनोपिको - एक वर्कअराउंड जोड़ा गया। – YOU

+0

मैंने आपके रेगेक्स को संपादित किया है और यह अब काम करता है। –

2

आप IP पते Regexp::Common::net पैकेज का उपयोग मिलान कर सकते हैं, और उन्हें हेरफेर (और netmasks आदि मिलता है) CPAN पर मॉड्यूल, Network::IPv4Addr, NetAddr::IP और Net::CIDR सहित के किसी भी संख्या के साथ।

+0

मैं इस तरह smt का उपयोग करने का इरादा रखता हूं: # जांचें, हमारे पास किस श्रेणी का प्रारूप है? \t अगर ($ ipline = ~/^ ((?: \ D + \।) {3}) (\ d +) - (\ d +) $ /) { \t $ ipline = ~ s/^ ((?:: \ d + \।) {3}) (\ d +) - (\ d +) $/$ 1 $ 2 - $ 1 $ 3 /; \t} –

संबंधित मुद्दे

 संबंधित मुद्दे