Die folgenden Informationen werden von der durch das Argument angegebenen IP-Adresse angezeigt (nur eine). ・ Adressklasse (Klasse A oder Klasse B oder Klasse C oder Klasse D) ・ Globale IP-Adresse oder private IP-Adresse
Es wird auf GitHub hochgeladen. → ipAddressInfo Ich habe es nicht so oft getestet, daher kann es zu Fehlcodierungen kommen ... Wenn Sie einen Fehler mit dem Code oder eine Verbesserung feststellen, teilen Sie uns dies bitte in den Kommentaren mit oder bearbeiten Sie die Anfrage.
Main.java
package pk;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
private static final String CLASS_A_PREFIX = "0";
private static final String CLASS_B_PREFIX = "10";
private static final String CLASS_C_PREFIX = "110";
private static final String CLASS_D_PREFIX = "1110";
public static void main(String[] args) {
//Argumentprüfung
if (args.length != 1) {
System.out.println("Geben Sie die IP-Adresse im Argument an.");
System.exit(1);
}
//Regulärer Ausdruck zur Bestimmung der IP-Adresse
Pattern pattern = Pattern.compile(
"(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])");
Matcher matcher = pattern.matcher(args[0]);
if (matcher.find()) {
List<String> addressList = new ArrayList<>();
addressList = Arrays.asList(args[0].split("\\."));
String addressClass = getIpAdressClass(getBinaryAddress(addressList.get(0)));
switch (addressClass) {
case CLASS_A_PREFIX:
if (isPrivateAddress(addressList, CLASS_A_PREFIX)) {
showResult("Klasse a", "Private IP-Adresse");
} else {
showResult("Klasse a", "Globale IP-Adresse");
}
break;
case CLASS_B_PREFIX:
if (isPrivateAddress(addressList, CLASS_B_PREFIX)) {
showResult("Klasse b", "Private IP-Adresse");
} else {
showResult("Klasse b", "Globale IP-Adresse");
}
break;
case CLASS_C_PREFIX:
if (isPrivateAddress(addressList, CLASS_C_PREFIX)) {
showResult("Klasse C", "Private IP-Adresse");
} else {
showResult("Klasse C", "Globale IP-Adresse");
}
break;
case CLASS_D_PREFIX:
System.out.println("Klasse D.");
break;
default:
System.out.println("Eine Adresse, die keiner Klasse angehört.");
break;
}
} else {
System.out.println("Es folgt nicht dem IP-Adressformat.");
System.exit(1);
}
}
/**
*Konvertieren Sie von dezimal in binär
* @param decimalAddress Dezimaladresse
* @Rückgabewert, der durch Konvertieren einer Dezimalzahl in eine Binärzahl erhalten wird
*/
private static String getBinaryAddress(String decimalAddress) {
return String.format("%8s", Integer.toBinaryString(Integer.valueOf(decimalAddress))).replace(" ", "0");
}
/**
*Bestimmen Sie, zu welcher Klasse es gehört
* @param binaryAddress Binäradresse
* @Präfix für jede Rückgabeklasse, wenn sie keiner Klasse angehört"1"Gib es zurück
*/
private static String getIpAdressClass(String binaryAddress) {
if (CLASS_A_PREFIX.equals(binaryAddress.substring(0, 1))) {
return CLASS_A_PREFIX;
} else if (CLASS_B_PREFIX.equals(binaryAddress.substring(0, 2))) {
return CLASS_B_PREFIX;
} else if (CLASS_C_PREFIX.equals(binaryAddress.substring(0, 3))) {
return CLASS_C_PREFIX;
} else if (CLASS_D_PREFIX.equals(binaryAddress.substring(0, 4))) {
return CLASS_D_PREFIX;
} else {
return "1";
}
}
/**
*Stellen Sie fest, ob die zur Adressklasse von Klasse A bis Klasse C gehörende IP-Adresse eine globale oder eine private IP ist
* @param classPrefix
* @return Gibt true für private IP-Adressen zurück, andernfalls false
*/
private static boolean isPrivateAddress(List<String> addressList, String classPrefix) {
int firstSet = Integer.valueOf(addressList.get(0));
int secondSet = Integer.valueOf(addressList.get(1));
switch (classPrefix) {
case CLASS_A_PREFIX:
//Der Bereich der privaten IP-Adressen der Klasse A beträgt
// 10.0.0.0 ~ 10.255.255.255
if (firstSet == 10) {
return true;
}
break;
case CLASS_B_PREFIX:
//Der Bereich der privaten IP-Adressen der Klasse B beträgt
// 172.16.0.0 ~ 172.31.255.255
if (firstSet == 172 && (16 <= secondSet && secondSet <= 31)) {
return true;
}
break;
case CLASS_C_PREFIX:
//Der Bereich der privaten IP-Adressen der Klasse C beträgt
// 192.168.0.0 ~ 192.168.255.255
if (firstSet == 192 && secondSet == 168) {
return true;
}
break;
case CLASS_D_PREFIX:
//Klasse D ist für Multicast, daher gibt es kein Konzept für global oder privat
break;
default:
return false;
}
return false;
}
/**
*Zeigen Sie das Identifikationsergebnis der IP-Adresse an
* @param addressClass Name der IP-Adressklasse
* @param addressStatus Globale IP-Adresse oder private IP-Adresse
*/
private static void showResult(String addressClass, String addressStatus) {
System.out.println(addressClass + "Und" + addressStatus + "ist.");
}
}
> java pk.Main 208.77.188.166
Klasse C und globale IP-Adresse.
IP-Übereinstimmung mit regulärem Ausdruck -Regexp Regulärer Ausdruck, mit dem Hidemaru nach IP-Adresse sucht IP-Adresse-Wikipedia [2018 [Frühling] [Herbst] Applied Information Engineer hat das Lehrbuch (Prüfung zum Information Processing Engineer) bestanden](https://www.amazon.co.jp/%E5%B9%B3%E6%88%9030% E5% B9% B4% E5% BA% A6% E3% 80% 90% E6% 98% A5% E6% 9C% 9F% E3% 80% 91% E3% 80% 90% E7% A7% 8B% E6% 9C% 9F% E3% 80% 91% E5% BF% 9C% E7% 94% A8% E6% 83% 85% E5% A0% B1% E6% 8A% 80% E8% A1% 93% E8% 80% 85-% E5% 90% 88% E6% A0% BC% E6% 95% 99% E6% 9C% AC-% E6% 83% 85% E5% A0% B1% E5% 87% A6% E7% 90% 86% E6% 8A% 80% E8% A1% 93% E8% 80% 85% E8% A9% A6% E9% A8% 93-% E5% A4% A7% E6% BB% 9D-% E3% 81% BF% E3% 82% 84% E5% AD% 90 / dp / 4774193151 / ref = sr_1_2? Ie = UTF8 & qid = 1517733175 & sr = 8-2 & Schlüsselwörter =% E5% BF% 9C% E7% 94% A8% E6% 83% 85 % E5% A0% B1% E6% 8A% 80% E8% A1% 93% E8% 80% 85)
Nehmen Sie die Qualifikation für Bewerbungsinformationen im April dieses Jahres. Wenn Sie bestehen, erhalten Sie eine Belohnung von der Firma, also kaufen Sie einen Anzug und PS Vita!
Recommended Posts