JS 判断一个IP地址是否为内网IP
如题。
地址块 | 起始 | 结束 | 备注 |
---|---|---|---|
10.0.0.0/8 | 10.0.0.0 | 10.255.255.255 | 局域网分配 |
172.16.0.0/12 | 172.16.0.0 | 172.31.255.255 | 局域网分配 |
192.0.0.0/24 | 192.168.0.0 | 192.168.255.255 | 局域网分配 |
100.64.0.0/10 | 100.64.0.0 | 100.127.255.255 | 运营商级NAT |
169.254.0.0/16 | 169.254.0.0 | 169.254.255.255 | 两台主机对等连接,当Windows获取不到IP地址的时候会自动分配此类地址 |
127.0.0.0/8 | 127.0.0.0 | 127.255.255.255 | 回环(loopback)地址,表示本机 |
255.255.255.255/32 | 255.255.255.255 | 255.255.255.255 | 广播地址 |
仅判断前四种,后三种不会出现在网络连接中,暂时不管。
function isPrivateIP(ip) {
var parts = ip.split('.');
return parts[0] === '10' ||
(parts[0] === '172' && (parseInt(parts[1], 10) >= 16 && parseInt(parts[1], 10) <= 31)) ||
(parts[0] === '192' && parts[1] === '168') ||
(parts[0] === '100' && parseInt(parts[1], 10) >=64 && parseInt(parts[1], 10) <=127)
}
参考链接:
https://stackoverflow.com/questions/13969655/how-do-you-check-whether-the-given-ip-is-internal-or-not
https://datatracker.ietf.org/doc/html/rfc6598
https://wangye.org/blog/archives/1079/
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。