目前我有一个工作端口扫描程序,但我想将其限制为只扫描本地子网上的IP地址。
我在挖掘时发现的唯一解决方案是: Does anyone know a java component to check if IP address is from particular network/netmask?但是我不完全明白
子网和网络掩码有什么区别?我以为他们是一回事?
其次,我如何找到localHost的子网和网络掩码的值?
到目前为止,这就是我所拥有的
NetworkInterface network = NetworkInterface.getByInetAddress(localHost);
short subnetMask =
network.getInterfaceAddresses().get(1).getNetworkPrefixLength();
但这是网络掩码还是子网?我如何获得其他价值?
答案 0 :(得分:0)
您确定的subnetMask是网络中的位数。通过将掩码中的位之后的地址中的所有位设置为零来找到网络地址。此代码应以通常的形式打印掩码和网络地址。
NetworkInterface network = NetworkInterface.getByInetAddress(localhost);
short subnetMask
= network.getInterfaceAddresses().get(1).getNetworkPrefixLength();
int address_int = ByteBuffer.wrap(localhost.getAddress()).getInt();
int mask_int = 0;
for(int i = 0; i < subnetMask-1; i++) {
mask_int = mask_int | (1<<31);
mask_int = mask_int >> 1;
}
byte mask_bytes[] = ByteBuffer.allocate(4).putInt(mask_int).array();
InetAddress mask_address = InetAddress.getByAddress(mask_bytes);
System.out.println("mask_address = " + mask_address);
int network_int = mask_int & address_int;
byte network_bytes[] = ByteBuffer.allocate(4).putInt(network_int).array();
InetAddress network_address = InetAddress.getByAddress(network_bytes);
System.out.println("network_address = " + network_address);
您可以使用network_mask整数使用按位和整数形式的地址来测试此网络上是否有任何地址。如果它在网络上,则应生成address_int。