Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでIPアドレスを検証する


文字列があるとします。指定された入力が有効なIPv4アドレスかIPv6アドレスか、またはどちらでもないかどうかを確認する必要があります。

IPv4アドレスは、ドット付き10進表記で正規に表されます。ドット付き10進表記は、それぞれ0〜255の範囲で、ドット( "。")で区切られた4つの10進数で構成されます。たとえば、192.168.254.1。また、IPv4アドレスの先行ゼロは無効です。たとえば、アドレス192.168.254.01は無効です。

IPv6アドレスは、4桁の16進数の8つのグループとして表され、各グループは16ビットを表します。グループはコロン( ":")で区切られます。たとえば、アドレスが2001:0db8:85a3:0000:0000:8a2e:0370:7334であるとします。また、アドレスの4桁の16進数の先行ゼロと大文字の小文字を省略できるため、2001:db8:85a3:0:0:8A2E:0370:7334このアドレスも有効です

ただし、単純さを追求するために、ゼロ値の連続するグループを2つの連続するコロン(::)を使用する単一の空のグループに置き換えることはありません。したがって、たとえば、2001:0db8:85a3 ::8A2E:0370:7334は無効なIPv6アドレスです。さらに、IPv6の余分な先行ゼロも無効です。アドレス02001:0db8:85a3:0000:0000:8a2e:0370:7334が無効です。

これを解決するには、次の手順に従います-

  • メソッドcheckv4(x)を定義します。これにより、xが0〜255の範囲にあるかどうかがチェックされ、次にtrueになり、そうでない場合はfalseになります

  • メソッドcheckv6(x)を定義します。これは次のように機能します-

    • サイズがx>4の場合、falseを返します

    • x> =0に相当する10進数で、x [0]が「-」でない場合はtrueを返し、それ以外の場合はfalseを返します

  • メインメソッドから

  • 入力に3つのドットがあり、各部分についてv4(i)がtrueであることを確認した場合は、「IPv4」を返します

  • 入力に7つのコロンがあり、各部分でv6(i)がtrueであることを確認した場合は、「IPv6」を返します

例(Python)

理解を深めるために、次の実装を見てみましょう-

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"))

入力

"172.16.254.1"

出力

"IPv4"

  1. PythonでIPアドレスのファンを削除する

    有効なIPv4IPアドレスがあるとします。 IPアドレスのDefangedバージョンを返す必要があります。削除されたIPアドレスは、基本的に「。」の期間ごとに置き換えられます。 「[。]」によってIPアドレスが「192.168.4.1」の場合、出力は「192[。]168[。]4[。]1」になります これを解決するには、次の手順に従います- ドットを使用して文字列を分割し、各要素を「[。]」で区切って配置します 例 理解を深めるために、次の実装を見てみましょう- class Solution(object):    def defangIPaddr(self, add

  2. Pythonで複数の値を返しますか?

    Python関数は複数の値を返すことができます。これらの値は、変数に直接格納できます。関数は変数を返すように制限されていません。0、1、2、またはそれ以上の値を返すことができます。 これは、C++やJavaなどの他の多くのプログラミング言語では使用できない複数の値/変数を返すPythonのデフォルトのプロパティです。 関数から複数の値を返す場合は、要件に応じてタプル、リスト、またはディクショナリオブジェクトを返すことができます。 方法1:タプルを使用する def func(x):    y0 = x+ 1    y1 = x * 3   &