sql >> データベース >  >> RDS >> Mysql

IPがサブネット内にあるかどうかを確認します

    確かに、それは実行可能です。サブネットマスクは、サブネットクラスで指定された数の最上位ビットを1に設定して計算するという考え方です。クラスCの場合、それは

    SELECT -1 << 8;
    

    次に、サブネットマスクと現在のIPアドレスをANDします。 IPがサブネット内にある場合、結果はサブネットアドレス(標準のネットワーク関連のもの)と等しくなるはずです。したがって、最終的には次のようになります。

    SELECT (-1 << 8) & INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");
    

    更新: はい、ネットワーククラスを知っている必要がありますまたは サブネットマスク(同等の情報)。サブネットがX.Y.0.0の場合をどのように処理できるかを検討してください。 この情報がなかった場合。これはX.Y.0.0/16ですか またはX.Y.0.0/8 3番目のオクテットがちょうど起こる 0になる?知る方法はありません。

    サブネットマスクがわかっている場合は、クエリを次のように記述できます

    SELECT (-1 << (33 - INSTR(BIN(INET_ATON("255.255.255.0")), "0"))) &
           INET_ATON("192.168.0.1") = INET_ATON("192.168.0.0");
    


    1. テーブルをマスクして参照整合性を維持する方法

    2. 「エラー1054(42S22):MariaDBの「orderclause」の不明な列「colname」」を修正しました

    3. mysqldumpのバックアップとリモートサーバーへの復元

    4. GroupByクエリに欠落している月を含める