gpt4 book ai didi

java - java中ip地址与子网掩码的匹配

转载 作者:行者123 更新时间:2023-12-02 03:59:10 30 4
gpt4 key购买 nike

我有以下场景:假设我收到一个具有 Ipv4 地址的数据包。我需要根据此 IP 地址与特定子网掩码的匹配来执行某些方法。我想做一个基于IP和掩码的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")}

关于java - java中ip地址与子网掩码的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35085116/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com