DEV Community

Abhishek Chaudhary
Abhishek Chaudhary

Posted on

2 1

Validate IP Address

Given a string queryIP, return "IPv4" if IP is a valid IPv4 address, "IPv6" if IP is a valid IPv6 address or "Neither" if IP is not a correct IP of any type.

A valid IPv4 address is an IP in the form "x1.x2.x3.x4" where 0 <= xi <= 255 and xi cannot contain leading zeros. For example, "192.168.1.1" and "192.168.1.0" are valid IPv4 addresses while "192.168.01.1", "192.168.1.00", and "192.168@1.1" are invalid IPv4 addresses.

A valid IPv6 address is an IP in the form "x1:x2:x3:x4:x5:x6:x7:x8" where:

  • 1 <= xi.length <= 4
  • xi is a hexadecimal string which may contain digits, lowercase English letter ('a' to 'f') and upper-case English letters ('A' to 'F').
  • Leading zeros are allowed in xi.

For example, "2001:0db8:85a3:0000:0000:8a2e:0370:7334" and "2001:db8:85a3:0:0:8A2E:0370:7334" are valid IPv6 addresses, while "2001:0db8:85a3::8A2E:037j:7334" and "02001:0db8:85a3:0000:0000:8a2e:0370:7334" are invalid IPv6 addresses.

Example 1:

Input: queryIP = "172.16.254.1"
Output: "IPv4"
Explanation: This is a valid IPv4 address, return "IPv4".

Example 2:

Input: queryIP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
Output: "IPv6"
Explanation: This is a valid IPv6 address, return "IPv6".

Example 3:

Input: queryIP = "256.256.256.256"
Output: "Neither"
Explanation: This is neither a IPv4 address nor a IPv6 address.

Constraints:

  • queryIP consists only of English letters, digits and the characters '.' and ':'.

SOLUTION:

class Solution:
    def validIPAddress(self, queryIP: str) -> str:
        isv4 = True
        isv6 = True
        if "." in queryIP:
            isv6 = False
            queryIP = queryIP.split(".")
            if len(queryIP) != 4:
                isv4 = False
        else:
            isv4 = False
        if ":" in queryIP:
            isv4 = False
            queryIP = queryIP.split(":")
            if len(queryIP) != 8:
                isv6 = False
        else:
            isv6 = False
        if isv4:
            for x in queryIP:
                if not x.isnumeric() or (len(x) > 1 and x[0] == "0") or not 0 <= int(x) < 256:
                    isv4 = False
                    break
        if isv6:
            for x in queryIP:
                try:
                    int(x, 16)
                    if len(x) > 4:
                        raise
                except:
                    isv6 = False
                    break
        if isv4:
            return "IPv4"
        if isv6:
            return "IPv6"
        return "Neither"
Enter fullscreen mode Exit fullscreen mode

AWS Q Developer image

Your AI Code Assistant

Implement features, document your code, or refactor your projects.
Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay