JSでIPアドレスがサブネットマスクで指定した範囲内にあるか判定する
約 3 分
目次
概要
JSでIPアドレス(IPv4)が指定したサブネットの範囲に含まれるか判定するロジックを作った時の記録です。
IPアドレスが指定した範囲内にあるかどうか判定
処理としては、IPアドレスのネットワークアドレスが同じかどうかを比較する方法でチェックします。
// IPv4(X.X.X.X)形式のIPアドレスをNumber型に変換する
const ip2long = (ip) =>
parseInt(
ip.split('.').map(e => Number(e).toString(2).padStart(8, '0')).join(''),
2,
);
const inRange = (remoteIp, acceptIp, cidr) => {
cidr = Number(cidr);
const remoteIpNetwork = remoteIp >>> (32 - cidr);
const acceptIpNetwork = acceptIp >>> (32 - cidr);
return remoteIpNetwork === acceptIpNetwork;
};
// 短くするとこう書ける
// const inRange = (remoteIp, acceptIp, cidr) => remoteIp >>> (32 - Number(cidr)) === acceptIp >>> (32 - Number(cidr))
console.log(
`192.168.0.1 は 192.168.0.254/24 に含まれ${
inRange(ip2long('192.168.0.1'), ip2long('192.168.0.254'), 24)
? 'ます'
: 'ません'
}`,
);
// 192.168.0.1 は 192.168.0.254/24 に含まれます
console.log(
`192.168.1.0 は 192.168.0.254/24 に含まれ${
inRange(ip2long('192.168.1.0'), ip2long('192.168.0.254'), 24)
? 'ます'
: 'ません'
}`,
);
// 192.168.1.0 は 192.168.0.254/24 に含まれません
参考にしたサイト
おすすめの記事
最新の記事
よく読まれている記事
タグから探す
- javascript129
- typescript66
- node.js54
- linux54
- 画像処理48
- amazon-aws47
- アルゴリズム37
- canvas35
- html529
- 画像処理100本ノック27
- php24
- centos24
- python22
- 競技プログラミング21
- mac21
- mysql20
- opencv17
- 雑談16
- 機械学習16
- docker16
- wordpress15
- atcoder14
- apache12
- データベース12
- amazon-s312
- red-hat12
- prisma12
- ubuntu11
- github10
- git10
- react10
- mariadb10
- vue.js9
- aws-cdk9
- css38
- 可視化8
- 小ネタ8
- next.js8
- nestjs8
- amazon-lightsail7
- ブログ6
- cms6
- oracle6
- perl6
- gitlab6
- iam5
- amazon-ec25
- 資格試験5
- aws-amplify5
- curl4