Computer >> Máy Tính >  >> Lập trình >> Python

Xác thực địa chỉ IP bằng Python


Giả sử chúng ta có một chuỗi; chúng tôi phải kiểm tra xem đầu vào đã cho có phải là địa chỉ IPv4 hay địa chỉ IPv6 hợp lệ hay không.

Các địa chỉ IPv4 về mặt cơ bản được biểu diễn bằng ký hiệu dấu chấm-thập phân, bao gồm bốn số thập phân, mỗi số từ 0 đến 255, được phân tách bằng dấu chấm ("."), Ví dụ:192.168.254.1; Bên cạnh đó, các số 0 ở đầu trong địa chỉ IPv4 không hợp lệ. Ví dụ:địa chỉ 192.168.254.01 không hợp lệ.

Địa chỉ IPv6 được biểu diễn dưới dạng tám nhóm gồm bốn chữ số thập lục phân, mỗi nhóm đại diện cho 16 bit. Các nhóm được phân tách bằng dấu hai chấm (":"). Ví dụ:giả sử địa chỉ là 2001:0db8:85a3:0000:0000:8a2e:0370:7334 là một địa chỉ hợp lệ. Ngoài ra, chúng tôi có thể bỏ qua một số số 0 ở đầu trong số bốn chữ số thập lục phân và một số ký tự viết thường trong địa chỉ thành những ký tự viết hoa, vì vậy 2001:db8:85a3:0:0:8A2E:0370:7334 địa chỉ này cũng là một

Tuy nhiên, chúng tôi không thay thế một nhóm giá trị 0 liên tiếp bằng một nhóm trống duy nhất sử dụng hai dấu hai chấm liên tiếp (::) để theo đuổi sự đơn giản. Vì vậy, ví dụ:2001:0db8:85a3 ::8A2E:0370:7334 là địa chỉ IPv6 không hợp lệ. Bên cạnh đó, các số không ở đầu thêm trong IPv6 cũng không hợp lệ. Địa chỉ 02001:0db8:85a3:0000:0000:8a2e:0370:7334 không hợp lệ.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định phương thức checkv4 (x), điều này sẽ kiểm tra xem x có nằm trong phạm vi 0 đến 255 hay không, sau đó là true, nếu không thì false

  • Xác định phương thức checkv6 (x), phương thức này sẽ hoạt động như sau -

    • nếu kích thước của x> 4, thì trả về false

    • nếu số thập phân tương đương của x> =0 và x [0] không phải là ‘-’, thì trả về true, ngược lại là false

  • Từ phương thức chính

  • Nếu đầu vào có ba dấu chấm và đối với mỗi phần tôi kiểm trav4 (i) là đúng, thì trả về “IPv4”

  • Nếu đầu vào có bảy dấu hai chấm và đối với mỗi phần tôi kiểm trav6 (i) là đúng, thì trả về “IPv6”

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

class Solution(object):
   def validIPAddress(self, IP):
      """
      :type IP: str
      :rtype: str
      """
      def isIPv4(s):
         try: return str(int(s)) == s and 0 <= int(s) <= 255
         except: return False
      def isIPv6(s):
         if len(s) > 4:
            return False
         try : return int(s, 16) >= 0 and s[0] != '-'
         except:
            return False
      if IP.count(".") == 3 and all(isIPv4(i) for i in IP.split(".")):
         return "IPv4"
      if IP.count(":") == 7 and all(isIPv6(i) for i in IP.split(":")):
         return "IPv6"
      return "Neither"
ob = Solution()
print(ob.validIPAddress("172.16.254.1"))

Đầu vào

"172.16.254.1"

Đầu ra

"IPv4"