与 java 中的子网掩码匹配的 IP 地址
ip address matching with subnetmask in java
我遇到以下情况:假设我收到一个具有 Ipv4 地址的数据包。我需要根据此 IP 地址与某个子网掩码的匹配来执行某些方法。我想做一个基于IP和mask的if指令
例子:假设通过的条件是数据包的目的IP地址需要是150.0.0.0/8
。如果我收到一个 IP 地址为 150.1.1.1
的数据包,则会处理该数据包,而如果我收到一个 IP 地址为 151.2.2.2
的数据包,则该数据包将被忽略。
如何设置这样的规则?
谢谢!
public long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
//left shifting 24,16,8,0 and bitwise OR
//1. 192 << 24
//1. 168 << 16
//1. 1 << 8
//1. 2 << 0
result |= ip << (i * 8);
}
return result;
}
long gw = ipToLong("150.0.0.0") // i assume you converted the ip to a 32bit unsigned int
int netmaskBits = 8; // in your example you had: /8, so this is 8
// clear the right-most bits, leave only the leftmost 8 bits
long netmask = (gw>>(32-netmaskBits))<<(32-netmaskBits);
long ip = ipToLong("150.1.1.1");
long maskedIp = (ip>>(32-netmaskBits))<<(32-netmaskBits);
if (maskedIp == netmask) {System.out.println("allowed")}
你可以这样计算:
151.1.1.1 &
255.0.0.0
这为您提供了网络地址。并且如果地址匹配 150.0.0.0
,则您接受包裹。很简单的逻辑and
.
我遇到以下情况:假设我收到一个具有 Ipv4 地址的数据包。我需要根据此 IP 地址与某个子网掩码的匹配来执行某些方法。我想做一个基于IP和mask的if指令
例子:假设通过的条件是数据包的目的IP地址需要是150.0.0.0/8
。如果我收到一个 IP 地址为 150.1.1.1
的数据包,则会处理该数据包,而如果我收到一个 IP 地址为 151.2.2.2
的数据包,则该数据包将被忽略。
如何设置这样的规则? 谢谢!
public long ipToLong(String ipAddress) {
long result = 0;
String[] ipAddressInArray = ipAddress.split("\.");
for (int i = 3; i >= 0; i--) {
long ip = Long.parseLong(ipAddressInArray[3 - i]);
//left shifting 24,16,8,0 and bitwise OR
//1. 192 << 24
//1. 168 << 16
//1. 1 << 8
//1. 2 << 0
result |= ip << (i * 8);
}
return result;
}
long gw = ipToLong("150.0.0.0") // i assume you converted the ip to a 32bit unsigned int
int netmaskBits = 8; // in your example you had: /8, so this is 8
// clear the right-most bits, leave only the leftmost 8 bits
long netmask = (gw>>(32-netmaskBits))<<(32-netmaskBits);
long ip = ipToLong("150.1.1.1");
long maskedIp = (ip>>(32-netmaskBits))<<(32-netmaskBits);
if (maskedIp == netmask) {System.out.println("allowed")}
你可以这样计算:
151.1.1.1 &
255.0.0.0
这为您提供了网络地址。并且如果地址匹配 150.0.0.0
,则您接受包裹。很简单的逻辑and
.