Java判断某个IP是否在某个网段
Java判断某个IP是否在某个网段
参考网址
摘抄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| 大学学的计算机网络已经忘了一大半,今天接到一个需求,需要判断用户的请求ip是否在办公网网段,如果是,那么就要做出相应的提示。
一开始我以为,办公网段就只需要截取前三位就行,比如:22.3.4.6 所在网段就是22.3.4就可以。
可是安全管理员给我发的却不是这样。而是以下这样的。
192.168.1.64/26
192.168.0.0/23
192.168.0.0/24
192.168.0.0/32
这些是什么意思呢?
前面的192.168.1.64表示ip后面的26表示掩码,就是表示192.168.1.64的前26位不能动,ip分为四部分,每一辈分占8位,一共32位,也就是说32位中有26位是不能动的,前面的192.168.1占8*3=24位不能动。后面的64是0100 0000 前面已经有24位不能动了,所以后面还有2位不能动就是01不能动。所以网段就是192.168.1.64-192.168.1.127
同理192.168.0.0/23就是前23位不能动,192.168不能动 8*2=16位 后面有7位不能动后面的0就是0000 0000其中前7位不能动,后一位随便是0或者1 所以网段是192.168.0-192.168.1
192.168.0.0/24前24位不能动,192.168.0不能动 8*3=24位 后面有8位随便动 所以网段是192.168.0
192.168.0.0/32是前32位都不能动所以网段是 192.168.0.0
下面提供一下网上摘抄的java如何判断是否在某一个网段呢?
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package com.ip; public class IpTest { public static void main(String[] args) { System.out.println(isInRange("192.168.1.127", "192.168.1.64/26")); System.out.println(isInRange("192.168.1.2", "192.168.0.0/23")); System.out.println(isInRange("192.168.0.1", "192.168.0.0/24")); System.out.println(isInRange("192.168.0.0", "192.168.0.0/32")); } public static boolean isInRange(String ip, String cidr) { String[] ips = ip.split("\\."); int ipAddr = (Integer.parseInt(ips[0]) << 24) | (Integer.parseInt(ips[1]) << 16) | (Integer.parseInt(ips[2]) << 8) | Integer.parseInt(ips[3]); int type = Integer.parseInt(cidr.replaceAll(".*/", "")); int mask = 0xFFFFFFFF << (32 - type); String cidrIp = cidr.replaceAll("/.*", ""); String[] cidrIps = cidrIp.split("\\."); int cidrIpAddr = (Integer.parseInt(cidrIps[0]) << 24) | (Integer.parseInt(cidrIps[1]) << 16) | (Integer.parseInt(cidrIps[2]) << 8) | Integer.parseInt(cidrIps[3]); return (ipAddr & mask) == (cidrIpAddr & mask); }
|
- 本文标题:Java判断某个IP是否在某个网段
- 本文作者:Xplorist
- 创建时间:2021-01-29 23:43:00
-
本文链接:https://xplorist.tech/2021/01/29/7cf5b4627d3b/
-
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
$tools-item-width = 2.2rem
$tools-item-font-size = 1.1rem
$tools-item-border-radius = 0.1rem
.side-tools-container {
position relative
.tools-item {
width $tools-item-width
height $tools-item-width
margin-bottom 0.2rem
color var(--default-text-color)
font-size $tools-item-font-size
background var(--background-color)
border-right none
border-radius $tools-item-border-radius
box-shadow 0.1rem 0.1rem 0.2rem var(--shadow-color)
cursor pointer
i {
color var(--default-text-color)
}
&:hover {
color var(--background-color)
background var(--primary-color)
box-shadow 0.2rem 0.2rem 0.4rem var(--shadow-color)
i {
color var(--background-color)
}
}
+keep-tablet() {
width $tools-item-width * 0.9
height $tools-item-width * 0.9
margin-bottom 0.2rem
font-size $tools-item-font-size * 0.9
}
&.rss {
a {
width 100%
height 100%
border-radius $tools-item-border-radius
&:hover {
color var(--background-color)
background var(--primary-color)
box-shadow 0.2rem 0.2rem 0.4rem var(--shadow-color)
}
}
}
}
.side-tools-list {
transform translateX(100%)
opacity 0
transition-t("transform, opacity", "0, 0", "0.2, 0.2", "linear, linear")
.tool-expand-width {
+keep-tablet() {
display none
}
}
&.show {
transform translateX(0)
opacity 1
}
}
.exposed-tools-list {
if (hexo-config('style.scroll.percent.enable') == true) {
.tool-scroll-to-top {
display none
&.show {
display flex
}
&:hover {
.percent {
display none
}
.arrow-up {
display flex
}
}
.arrow-up {
display none
}
.percent {
display flex
font-size 1rem
}
}
}
}
}