You will be provided with N lines of what are possibly IP addresses. You need to detect if the text contained in each of the lines represents an (a)IPv4 address (b)IPv6 address or ©None of these.
IPv4 was the first publicly used Internet Protocol which used 4 byte addresses which permitted for 232 addresses. The typical format of an IPv4 address is A.B.C.D where A, B, C and D are Integers lying between 0 and 255 (both inclusive).
IPv6, with 128 bits was developed to permit the expansion of the address space. To quote from the linked article: The 128 bits of an IPv6 address are represented in 8 groups of 16 bits each. Each group is written as 4 hexadecimal digits and the groups are separated by colons (:). The address 2001:0db8:0000:0000:0000:ff00:0042:8329 is an example of this representation. Consecutive sections of zeros will be left as they are.
An IPv6 value such as “…:0:…” or “…:5:…” is address-wise identical to “…:0000:…” or “…:0005:…”. Leading zeros may be omitted in writing the address.
Input Format
An integer N such that N <= 50. This is followed by N lines such that each the text in each line is either an IPv4 address or an IPv6 address, or a chunk of text which does not equal either of these. There will be no extra text or whitespace leading or trailing the IP address in a line (if it is an IP address). The number of characters in each line will not exceed 500.
Output Format
N lines.
The ith output line should equal (a)IPv4 or (b)IPv6 or ©Neither depending on what you detected the ith input line to be.
Sample Input
22
This line has junk text.
121.18.19.20
2001:0db8:0000:0000:0000:ff00:0042:8329
1050:0:0:0:5:600:300c:326b
1050:0:0:0:5:600:300c:326a
1050:0:0:0:5:600:300c:326c
1051:0:0:0:5:600:300c:326b
22.231.113.64
22.231.113.164
255.231.111.64
253.231.111.64
1050:10:0:0:5:600:300c:326b
1050:10:0:0:5:600:300c:326a
1050:10:0:0:5:600:300c:326c
1051:10:0:0:5:600:300c:326b
22.21.113.61
22.21.113.162
255.21.111.63
253.21.111.69
1050:10:0:0:15:600:300c:326b
1050:10:0:10:5:600:300c:326a
1050:10:10:0:5:600:300c:326c
Sample Output
Neither
IPv4
IPv6
IPv6
IPv6
IPv6
IPv6
IPv4
IPv4
IPv4
IPv4
IPv6
IPv6
IPv6
IPv6
IPv4
IPv4
IPv4
IPv4
IPv6
IPv6
IPv6
import sys
import re
for _ in range(int(input())):
text = sys.stdin.readline()
v4_pattern = r"^[0-2]{,1}[0-9]{,2}\.[0-2]{,1}[0-9]{,2}\.[0-2]{,1}[0-9]{,2}\.[0-2]{,1}[0-9]{,2}$"
v6_pattern = r"^[a-f0-9]{0,4}:[a-f0-9]{0,4}:[a-f0-9]{0,4}:[a-f0-9]{0,4}:[a-f0-9]{0,4}:[a-f0-9]{0,4}:[a-f0-9]{0,4}:[a-f0-9]{0,4}$"
result = 'Neither'
if re.search(v4_pattern, text):
result = 'IPv4'
elif re.search(v6_pattern, text):
result = 'IPv6'
print(result)
It’s great to come across a blog every once in a while that isn’t the same out of date rehashed material. Fantastic read. Best ipv6 address service provider.
ReplyDelete