我有第一个和最后一个子网地址(例如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);
}
}
通过哪种算法,您可以简单地计算出该地址范围的掩码长度?
答案 0 :(得分:0)
最长的子网掩码是所有地址共享的前缀位的最长序列。所以:
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