LoginSignup
0
2

More than 5 years have passed since last update.

MySQLで指定したIPアドレスがサブネット内にあるかチェック

Last updated at Posted at 2017-06-20

IPアドレスをMySQLで比較する

はじめに

個人的なメモを確認していたら発掘したので書いておく。何かの役に立つかとか何故こんなことをメモしていたのかは不明… せっかくなので使ってみた

やりかた

192.168.11.123 が 192.168.11.0/24 に入っているか調べたい。

IPアドレスをintにする。

INET_ATON('192.168.11.123') => 3232238459
INET_ATON('192.168.11.0') => 3232238336

両者のXORを取る

3232238459 ^ 3232238336 => 123

サブネット分をビットシフト 32 - 24 = 8

123 >> 8 => 0

0ならサブネット内にある

SQLにしてみる

SELECT (INET_ATON('192.168.11.123') ^ INET_ATON('192.168.11.0')) >> 8;

IPアドレスとサブネットを分割

SELECT SUBSTRING_INDEX('192.168.11.0/24', '/', 1);
192.168.11.0
SELECT SUBSTRING_INDEX('192.168.11.0/24', '/', -1);
24

全部合わせる

SELECT (INET_ATON('192.168.11.123') ^ INET_ATON(SUBSTRING_INDEX('192.168.11.0/24', '/', 1))) >> (32 - SUBSTRING_INDEX('192.168.11.0/24', '/', -1));

備考

サブネットマスクが24ビットとかなら LIKE '192.168.11.%'とかでいいけど、23ビットだとめんどくさくなるのでこういうことを考えたんだと思う。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2