दिलचस्प पोस्ट
उसी कोड से आवेदन के निशुल्क / भुगतान किए गए संस्करणों को बनाएं स्ट्रिंग का उपयोग करके पायथन में श्वेतस्थान निकालें। Whitespace सी स्कैनफ़ ("% c") के साथ समस्याओं में वर्ण एक-एक करके पढ़ने के लिए फ़ंक्शन संस्करण ट्रैकिंग के लिए दो जावा बीन्स के बीच अंतर जानने के लिए कस्टम कर्सर छवि सीएसएस संबद्ध प्रोग्राम लॉन्च करें या किसी अन्य प्रोग्राम से "खोलें" संवाद दिखाएं फ़ायरफ़ॉक्स पर डाउनलोड करने योग्य फ़ॉन्ट: खराब यूआरआई या क्रॉस-साइट एक्सेस की अनुमति नहीं है जावा से चींटी चलाएं जावा का उपयोग कर सेलेनियम वेबड्राइवर का उपयोग करके क्रोम प्रोफ़ाइल लोड करें एचटीएमएल / सीएसएस: क्लिक करने के लिए एक div "अदृश्य" बनाओ? पायथन में स्ट्रिंग का आकार कैसे प्राप्त करें? जब एक टंकिनर सूचीबॉक्सा चयन बदल जाता है तो कॉलबैक प्राप्त करना? CS0120: गैर-विशिष्ट क्षेत्र, विधि, या प्रॉपर्टी 'फू' के लिए ऑब्जेक्ट संदर्भ की आवश्यकता है जावा प्रतिबिंब का उपयोग करके निजी स्थिर अंतिम क्षेत्र बदलें IEnumerable.Cast <>

पायथन में आईपी पते को कैसे मान्य करें?

यह मान्य करने का सबसे अच्छा तरीका क्या है कि उपयोगकर्ता द्वारा आईपी मान्य है? यह एक स्ट्रिंग के रूप में आता है।

Solutions Collecting From Web of "पायथन में आईपी पते को कैसे मान्य करें?"

इसे पार्स नहीं करें सिर्फ पूछना।

import socket try: socket.inet_aton(addr) # legal except socket.error: # Not legal 
 import socket def is_valid_ipv4_address(address): try: socket.inet_pton(socket.AF_INET, address) except AttributeError: # no inet_pton here, sorry try: socket.inet_aton(address) except socket.error: return False return address.count('.') == 3 except socket.error: # not a valid address return False return True def is_valid_ipv6_address(address): try: socket.inet_pton(socket.AF_INET6, address) except socket.error: # not a valid address return False return True 

IPy मॉड्यूल (आईपी पते से निपटने के लिए डिज़ाइन किया गया एक मॉड्यूल) अवैध पतों के लिए एक ValueError अपवाद फेंक देगा।

 >>> from IPy import IP >>> IP('127.0.0.1') IP('127.0.0.1') >>> IP('277.0.0.1') Traceback (most recent call last): ... ValueError: '277.0.0.1': single byte must be 0 <= byte < 256 >>> IP('foobar') Traceback (most recent call last): ... ValueError: invalid literal for long() with base 10: 'foobar' 

हालांकि, डस्टिन के जवाब की तरह, यह "4" और "192.168" जैसी चीजों को स्वीकार करेगा, जैसा कि बताया गया है, ये आईपी पते के मान्य प्रतिनिधित्व हैं।

यदि आप Python 3.3 या बाद का उपयोग कर रहे हैं, तो इसमें अब आईपीड्रेस मॉड्यूल शामिल है :

 >>> import ipaddress >>> ipaddress.ip_address('127.0.0.1') IPv4Address('127.0.0.1') >>> ipaddress.ip_address('277.0.0.1') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.3/ipaddress.py", line 54, in ip_address address) ValueError: '277.0.0.1' does not appear to be an IPv4 or IPv6 address >>> ipaddress.ip_address('foobar') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.3/ipaddress.py", line 54, in ip_address address) ValueError: 'foobar' does not appear to be an IPv4 or IPv6 address 

Python 2 के लिए, अगर आप अजगर-आईपैड्रेस स्थापित करते हैं, तो आप समान कार्यक्षमता को ipaddress का उपयोग कर सकते हैं:

 pip install ipaddress 

यह मॉड्यूल पायथन 2 के साथ संगत है और पायथन 3.3 से पायथन स्टैण्डर्ड लाइब्रेरी में शामिल आईपैड्रेस मॉड्यूल के समान एक समान एपीआई प्रदान करता है। अधिक विवरण यहाँ ।

 def is_valid_ip(ip): """Validates IP addresses. """ return is_valid_ipv4(ip) or is_valid_ipv6(ip) 

आईपीवी 4:

 def is_valid_ipv4(ip): """Validates IPv4 addresses. """ pattern = re.compile(r""" ^ (?: # Dotted variants: (?: # Decimal 1-255 (no leading 0's) [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2} | 0x0*[0-9a-f]{1,2} # Hexadecimal 0x0 - 0xFF (possible leading 0's) | 0+[1-3]?[0-7]{0,2} # Octal 0 - 0377 (possible leading 0's) ) (?: # Repeat 0-3 times, separated by a dot \. (?: [3-9]\d?|2(?:5[0-5]|[0-4]?\d)?|1\d{0,2} | 0x0*[0-9a-f]{1,2} | 0+[1-3]?[0-7]{0,2} ) ){0,3} | 0x0*[0-9a-f]{1,8} # Hexadecimal notation, 0x0 - 0xffffffff | 0+[0-3]?[0-7]{0,10} # Octal notation, 0 - 037777777777 | # Decimal notation, 1-4294967295: 429496729[0-5]|42949672[0-8]\d|4294967[01]\d\d|429496[0-6]\d{3}| 42949[0-5]\d{4}|4294[0-8]\d{5}|429[0-3]\d{6}|42[0-8]\d{7}| 4[01]\d{8}|[1-3]\d{0,9}|[4-9]\d{0,8} ) $ """, re.VERBOSE | re.IGNORECASE) return pattern.match(ip) is not None 

आईपीवी 6:

 def is_valid_ipv6(ip): """Validates IPv6 addresses. """ pattern = re.compile(r""" ^ \s* # Leading whitespace (?!.*::.*::) # Only a single whildcard allowed (?:(?!:)|:(?=:)) # Colon iff it would be part of a wildcard (?: # Repeat 6 times: [0-9a-f]{0,4} # A group of at most four hexadecimal digits (?:(?<=::)|(?<!::):) # Colon unless preceeded by wildcard ){6} # (?: # Either [0-9a-f]{0,4} # Another group (?:(?<=::)|(?<!::):) # Colon unless preceeded by wildcard [0-9a-f]{0,4} # Last group (?: (?<=::) # Colon iff preceeded by exacly one colon | (?<!:) # | (?<=:) (?<!::) : # ) # OR | # A v4 address with NO leading zeros (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d) (?: \. (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]?\d) ){3} ) \s* # Trailing whitespace $ """, re.VERBOSE | re.IGNORECASE | re.DOTALL) return pattern.match(ip) is not None 

आईपीवी 6 संस्करण का उपयोग " (?:(?<=::)|(?<!::):) ", जो कि " (?(?<!::):) (?:(?<=::)|(?<!::):) से बदला जा सकता है" देखो-आस-पास के साथ कंडीशंस (अर्थात पीसीई, नेट)

संपादित करें:

  • मूल संस्करण को गिरा दिया
  • आरजीसी का अनुपालन करने के लिए रेगेक्स का विस्तार किया।
  • IPv6 पते के लिए एक और regex जोड़ा गया

EDIT2:

मुझे कुछ लिंक मिलते हैं जिनसे आईपीवी 6 पते पार्स करने के तरीके पर चर्चा होती है:

  • IPv6 पते के लिए एक नियमित अभिव्यक्ति – इंटरमाप्पर मंच
  • आईपीवी 6 नियमित अभिव्यक्ति कार्य करना – पैट्रिक का खेल का मैदान ब्लॉग
  • test-ipv6-regex.pl – परीक्षण मामलों के टन के साथ पर्ल स्क्रिप्ट ऐसा लगता है कि मेरे रेगेक्स कुछ परीक्षणों में विफल रहता है

Edit3:

आखिरकार एक टेस्ट लिखने में सफल रहे, जो सभी परीक्षणों से गुजरता है, और मैं भी खुश हूं।

Python 3.4 से, सबसे अच्छा तरीका है कि कोई IPv6 या IPv4 पता सही है, यह पायथन मानक पुस्तकालय मॉड्यूल ipaddress का उपयोग करना है – आईपीवी 4 / आईपीवी 6 हेरफेर लाइब्रेरी https://docs.python.org/3/library/ipaddress पूर्ण प्रलेखन के लिए .html

उदाहरण :

 #!/usr/bin/env python import ipaddress import sys try: ip = ipaddress.ip_address(sys.argv[1]) print '%s is a correct IP%s address.' % (ip, ip.version) except ValueError: print 'address/netmask is invalid: %s' % sys.argv[1] except: print 'Usage : %s ip' % sys.argv[0] 

अन्य संस्करणों के लिए: गिथूब, फिहाग / फिलिप हेगेमेस्टर, "पायथन 3.3 के आईपैड्रेस पुराने पायथन संस्करण", https://github.com/phihag/ipaddress

फ़िहैग का बैकपोर्ट उपलब्ध है जैसे एनाकोंडा पायथन 2.7 में और इंस्टॉलर में शामिल है। एक https://docs.continuum.io/anaconda/pkg-docs

पीआईपी के साथ स्थापित करने के लिए:

 pip install ipaddress 

सा: आईपैड्रेस 1.0.17, "आईपीवी 4 / आईपीवी 6 मैनिप्यूलेशन लाइब्रेरी", "पोर्ट ऑफ द 3.3+ आईपैड्रेस मॉड्यूल", https://pypi.python.org/pypi/ipaddress/1.0.17

मुझे उम्मीद है कि यह सरल और अजगर है:

 def is_valid_ip(ip): m = re.match(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$", ip) return bool(m) and all(map(lambda n: 0 <= int(n) <= 255, m.groups())) 

मुझे लगता है कि यह ऐसा करेगा …

 def validIP(address): parts = address.split(".") if len(parts) != 4: return False for item in parts: if not 0 <= int(item) <= 255: return False return True 

मुझे उनके पद के लिए मार्कस जार्डरॉट को काफी श्रेय देना होगा – मेरी पोस्ट का अधिकांश हिस्सा उनके द्वारा प्रेरित है

मुझे पता चला कि मार्कस का जवाब अभी भी उनके जवाब से संदर्भित पर्ल स्क्रिप्ट में कुछ IPv6 उदाहरणों को विफल करता है।

यहाँ मेरा regex है जो पर्ल स्क्रिप्ट में सभी उदाहरणों को देता है:

 r"""^ \s* # Leading whitespace # Zero-width lookaheads to reject too many quartets (?: # 6 quartets, ending IPv4 address; no wildcards (?:[0-9a-f]{1,4}(?::(?!:))){6} (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # 0-5 quartets, wildcard, ending IPv4 address (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,4}[0-9a-f]{1,4})? (?:::(?!:)) (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # 0-4 quartets, wildcard, 0-1 quartets, ending IPv4 address (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,3}[0-9a-f]{1,4})? (?:::(?!:)) (?:[0-9a-f]{1,4}(?::(?!:)))? (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # 0-3 quartets, wildcard, 0-2 quartets, ending IPv4 address (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,2}[0-9a-f]{1,4})? (?:::(?!:)) (?:[0-9a-f]{1,4}(?::(?!:))){0,2} (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # 0-2 quartets, wildcard, 0-3 quartets, ending IPv4 address (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,1}[0-9a-f]{1,4})? (?:::(?!:)) (?:[0-9a-f]{1,4}(?::(?!:))){0,3} (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # 0-1 quartets, wildcard, 0-4 quartets, ending IPv4 address (?:[0-9a-f]{1,4}){0,1} (?:::(?!:)) (?:[0-9a-f]{1,4}(?::(?!:))){0,4} (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # wildcard, 0-5 quartets, ending IPv4 address (?:::(?!:)) (?:[0-9a-f]{1,4}(?::(?!:))){0,5} (?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d) (?:\.(?:25[0-4]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3} | # 8 quartets; no wildcards (?:[0-9a-f]{1,4}(?::(?!:))){7}[0-9a-f]{1,4} | # 0-7 quartets, wildcard (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,6}[0-9a-f]{1,4})? (?:::(?!:)) | # 0-6 quartets, wildcard, 0-1 quartets (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,5}[0-9a-f]{1,4})? (?:::(?!:)) (?:[0-9a-f]{1,4})? | # 0-5 quartets, wildcard, 0-2 quartets (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,4}[0-9a-f]{1,4})? (?:::(?!:)) (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,1}[0-9a-f]{1,4})? | # 0-4 quartets, wildcard, 0-3 quartets (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,3}[0-9a-f]{1,4})? (?:::(?!:)) (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,2}[0-9a-f]{1,4})? | # 0-3 quartets, wildcard, 0-4 quartets (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,2}[0-9a-f]{1,4})? (?:::(?!:)) (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,3}[0-9a-f]{1,4})? | # 0-2 quartets, wildcard, 0-5 quartets (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,1}[0-9a-f]{1,4})? (?:::(?!:)) (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,4}[0-9a-f]{1,4})? | # 0-1 quartets, wildcard, 0-6 quartets (?:[0-9a-f]{1,4})? (?:::(?!:)) (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,5}[0-9a-f]{1,4})? | # wildcard, 0-7 quartets (?:::(?!:)) (?:(?:[0-9a-f]{1,4}(?::(?!:))){0,6}[0-9a-f]{1,4})? ) (?:/(?:1(?:2[0-7]|[01]\d)|\d\d?))? # With an optional CIDR routing prefix (0-128) \s* # Trailing whitespace $""" 

मैंने उन सभी IPv6 उदाहरणों का परीक्षण करने के लिए एक पायथन स्क्रिप्ट भी रखा है; यह पेस्टबिन पर है क्योंकि यहां पोस्ट करने के लिए बहुत बड़ा था।

आप "[परिणाम] = [उदाहरण]" के रूप में परीक्षा परिणाम और उदाहरण तर्कों के साथ स्क्रिप्ट चला सकते हैं, जैसे:

 python script.py Fail=::1.2.3.4: pass=::127.0.0.1 false=::: True=::1 

या आप बस कोई भी तर्क नहीं निर्दिष्ट करके सभी परीक्षणों को चला सकते हैं, जैसे:

 python script.py 

वैसे भी, मुझे आशा है कि यह किसी और को मदद करता है!

IPv4 पते को "आईपी" के रूप में देखें

 if re.match(r'^((\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d{1,2}|1\d{2}|2[0-4]\d|25[0-5])$', ip): print "Valid IP" else: print "Invalid IP" 

मुझे केवल आईपी वी 4 पते पार्स करने की जरूरत है I ठंड की रणनीति पर आधारित मेरा समाधान इस प्रकार है:

 def getIP (): 
वैध = गलत
वैध नहीं है, जबकि:
octets = raw_input ("दूरस्थ मशीन आईपी पता:") .स्ट्रिप ()। विभाजन ("।")
कोशिश करें: वैध = लेन (फिल्टर (लैम्ब्डा (आइटम): 0 <= int (आइटम) <256, ऑक्टेसेट)) == 4
को छोड़कर: वैध = गलत
वापसी "।" शामिल हों (ओकटेट)

मैं इस नोब सरल संस्करण के साथ आया था

 def ip_checkv4(ip): parts=ip.split(".") if len(parts)<4 or len(parts)>4: return "invalid IP length should be 4 not greater or less than 4" else: while len(parts)== 4: a=int(parts[0]) b=int(parts[1]) c=int(parts[2]) d=int(parts[3]) if a<= 0 or a == 127 : return "invalid IP address" elif d == 0: return "host id should not be 0 or less than zero " elif a>=255: return "should not be 255 or greater than 255 or less than 0 A" elif b>=255 or b<0: return "should not be 255 or greater than 255 or less than 0 B" elif c>=255 or c<0: return "should not be 255 or greater than 255 or less than 0 C" elif d>=255 or c<0: return "should not be 255 or greater than 255 or less than 0 D" else: return "Valid IP address ", ip p=raw_input("Enter IP address") print ip_checkv4(p)