与 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.