计算一系列地址的掩码

时间:2019-06-15 09:41:57

标签: node.js ip ipv4 cidr

我有第一个和最后一个子网地址(例如3.0.0.0和3.1.255.255)。 哪种算法可以让我计算该子网掩码的长度? 示例:

@RestController
@RequestMapping("/user")
public class UserRoleController {

    @Autowired
    private BCryptPasswordEncoder encoder;
    @Autowired
    private UserRoleService service;


    /*
     * @PostMapping("/add") public ResponseEntity<String> saveUser(@RequestBody User
     * user) { String pass = user.getPassword();
     * user.setPassword(encoder.encode(pass)); String temp = service.saveUser(user);
     * return new ResponseEntity<String>(temp, HttpStatus.OK); }
     */

    @GetMapping("/welcome")
    @PreAuthorize("hasAnyRole('user')")
    public String iMUser() {
        System.out.println("WORKED");
        return "Worked";
    }


    @GetMapping("/admin")
    @PreAuthorize("hasAnyRole('superadmin')")
    public ResponseEntity<String> saveUser(){
        User user= new User();
        Set<Role> role= new HashSet<Role>();
        Role role1= new Role();
        role1.setRole("user");

        user.setUserName("amalswain");
        user.setPassword(encoder.encode("password"));
        user.setMobileNo(7606844075L);

        role.add(role1);
        role.add(role1);
        role1.setUser(user);
        user.setRole(role);
        String temp= service.saveUser(user);
        return new ResponseEntity<String>(temp,HttpStatus.OK);
    }

}

通过哪种算法,您可以简单地计算出该地址范围的掩码长度?

1 个答案:

答案 0 :(得分:0)

最长的子网掩码是所有地址共享的前缀位的最长序列。所以:

  1. 将第一个和最后一个IP地址转换为整数
  2. 从HSB开始计数相同的位-这是掩码长度

IPv4地址实际上是32位无符号整数-点符号仅适用于我们人类。

第2步可以通过排他或两个地址来完成,这将导致所有相同的位均为0。然后右移,直到结果为零。掩码长度为32-(移位数)。

在您的示例中:

3.0.0.0     = 00000011 00000000 00000000 00000000
3.1.255.255 = 00000011 00000001 11111111 11111111
XOR         = 00000000 00000001 11111111 11111111
turns 0 after 17 right shifts => length is 15