用Java实现输入IP输出校验码
时间: 2023-06-16 07:07:35 浏览: 48
以下是用 Java 实现输入 IP 输出校验码的示例代码:
```java
import java.util.Scanner;
public class IPChecksum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter IP address: ");
String ipAddress = scanner.nextLine();
// Split IP address into octets
String[] octets = ipAddress.split("\\.");
// Calculate checksum
int checksum = 0;
for (String octet : octets) {
checksum += Integer.parseInt(octet);
}
// Output checksum
System.out.println("Checksum: " + checksum);
}
}
```
代码中首先通过 `Scanner` 类获取用户输入的 IP 地址,然后将 IP 地址拆分为 4 个八位二进制数,计算它们的和作为校验和,最后输出校验和。
相关问题
用Java实现输入网络地址输出校验码
网络地址的校验码通常是通过校验和算法来计算的。校验和算法是将数据按照固定大小的块进行分割,然后对每个块进行加和运算,最后将所有块的加和相加并取反,得到的结果就是校验和。具体实现方法如下:
```java
import java.net.InetAddress;
import java.net.UnknownHostException;
public class ChecksumCalculator {
public static void main(String[] args) {
try {
// 输入网络地址
InetAddress address = InetAddress.getByName("www.baidu.com");
byte[] data = address.getAddress();
// 计算校验和
int sum = 0;
for (int i = 0; i < data.length; i += 2) {
if (i == data.length - 1) {
sum += (data[i] & 0xFF) << 8;
} else {
sum += ((data[i] & 0xFF) << 8) | (data[i + 1] & 0xFF);
}
}
while ((sum >> 16) > 0) {
sum = (sum & 0xFFFF) + (sum >> 16);
}
int checksum = ~sum & 0xFFFF;
// 输出校验码
System.out.printf("校验码: %04X\n", checksum);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
```
在上面的代码中,我们通过 `InetAddress.getByName()` 方法获取了一个网络地址,然后将其转换为字节数组。接着,我们按照每两个字节为一组进行加和运算,直到计算出所有块的加和。最后,我们将加和取反得到校验和,并将其输出。
输入IP地址和掩码,用Java语言实现判断IP种类,输出网络地址和输出校验码
以下是Java代码实现:
```java
import java.util.Scanner;
public class IPClassification {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入IP地址和掩码
System.out.print("请输入IP地址:");
String[] ipAddress = scanner.nextLine().split("\\.");
System.out.print("请输入掩码:");
String[] mask = scanner.nextLine().split("\\.");
// 将IP地址和掩码转换成二进制字符串
String ipBinary = toBinaryString(ipAddress);
String maskBinary = toBinaryString(mask);
// 判断IP地址种类并输出网络地址和校验码
if (ipAddress[0].equals("127")) {
System.out.println("该IP地址为本地回环地址");
System.out.println("网络地址:" + ipAddress[0] + ".0.0.0");
System.out.println("校验码:" + "0.0.0.0");
} else if (ipAddress[0].matches("[01]{8}") && ipAddress[1].matches("[01]{8}")
&& ipAddress[2].matches("[01]{8}") && ipAddress[3].matches("[01]{8}")
&& mask[0].matches("[01]{8}") && mask[1].matches("[01]{8}")
&& mask[2].matches("[01]{8}") && mask[3].matches("[01]{8}")) {
int firstOctet = Integer.parseInt(ipAddress[0]);
if (firstOctet >= 1 && firstOctet <= 126) {
System.out.println("该IP地址为A类地址");
System.out.println("网络地址:" + firstOctet + ".0.0.0");
System.out.println("校验码:" + mask[0] + "." + mask[1] + "." + mask[2] + "." + mask[3]);
} else if (firstOctet >= 128 && firstOctet <= 191) {
System.out.println("该IP地址为B类地址");
System.out.println("网络地址:" + ipAddress[0] + "." + ipAddress[1] + ".0.0");
System.out.println("校验码:" + mask[0] + "." + mask[1] + "." + mask[2] + "." + mask[3]);
} else if (firstOctet >= 192 && firstOctet <= 223) {
System.out.println("该IP地址为C类地址");
System.out.println("网络地址:" + ipAddress[0] + "." + ipAddress[1] + "." + ipAddress[2] + ".0");
System.out.println("校验码:" + mask[0] + "." + mask[1] + "." + mask[2] + "." + mask[3]);
} else if (firstOctet >= 224 && firstOctet <= 239) {
System.out.println("该IP地址为D类地址");
System.out.println("网络地址:" + ipAddress[0] + "." + ipAddress[1] + "." + ipAddress[2] + "." + ipAddress[3]);
System.out.println("校验码:" + "不能用于网络地址");
} else if (firstOctet >= 240 && firstOctet <= 255) {
System.out.println("该IP地址为E类地址");
System.out.println("网络地址:" + ipAddress[0] + "." + ipAddress[1] + "." + ipAddress[2] + "." + ipAddress[3]);
System.out.println("校验码:" + "不能用于网络地址");
} else {
System.out.println("无效IP地址");
}
} else {
System.out.println("无效IP地址或掩码");
}
}
// 将IP地址和掩码转换成二进制字符串
private static String toBinaryString(String[] ipAddress) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
sb.append(String.format("%8s", Integer.toBinaryString(Integer.parseInt(ipAddress[i]))).replace(' ', '0'));
}
return sb.toString();
}
}
```
使用示例:
```
请输入IP地址:192.168.0.1
请输入掩码:255.255.255.0
该IP地址为C类地址
网络地址:192.168.0.0
校验码:255.255.255.0
```