Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java

【Überblick】

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.

【Code】

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.");
	}
}

[Ausführungsbeispiel]

> java pk.Main 208.77.188.166
Klasse C und globale IP-Adresse.

【Referenz】

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)

[Bonus Ecke]

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

Suchen Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java
Finden Sie die Adressklasse und den Adresstyp aus der IP-Adresse mit Java [Abkochung Nr. 2]
Land von IP-Adresse abrufen (Java)
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
[Java] Ermitteln Sie das Datum mit der LocalDateTime-Klasse
<java> Teilen Sie die Adresse vor und nach der Adresse mit einem regulären Ausdruck
[Java] Stellen Sie die Zeit im Browser mit jsoup ein
Inkrementiert durch das dritte Argument der iterierten Methode der aus Java9 hinzugefügten Stream-Klasse
Feld für den Java-Klassentyp
Fühlen Sie den Grundtyp und Referenztyp leicht mit Rubin
Schreiben Sie ABNF in Java und geben Sie die E-Mail-Adresse weiter
Java-Sprache aus der Sicht von Kotlin und C #
[Java] Holen Sie sich das Datum 10 Tage später mit der Calendar-Klasse
Fühlen Sie den Grundtyp und Referenztyp leicht mit Rubin 2
Bereiten Sie die Umgebung für Java11 und JavaFx mit Ubuntu 18.4 vor
"TCP / IP JAVA-Netzwerkprogrammierung aus den Grundlagen verstanden" Kompiliert mit Eclipse. Debuggen mit Wireshark.
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Unterschied zwischen Java und JavaScript (wie man den Durchschnitt findet)
Was ist die LocalDateTime-Klasse? [Java-Anfänger] -Datum und Zeitklasse-
Implementieren Sie die Java-Schnittstelle in der JRuby-Klasse und rufen Sie sie von Java aus auf
Stellen Sie Datum und Uhrzeit aus der Zeichenfolge mit POI ein
Definition und Instanziierung von Java-Klassen
Finden Sie alle Zeitzonen-IDs heraus, die von der Java TimeZone-Klasse unterstützt werden
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
Suchen und Ausführen einer Methode aus einer Instanz mit Verarbeitung (Java)
Installieren Sie das memcached Plugin unter MySQL und greifen Sie von Java aus zu
So legen Sie die IP-Adresse und den Hostnamen von CentOS8 fest
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
[Android, Java] Methode zum Ermitteln des abgelaufenen Datums aus zwei Daten
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
Vom jungen Java (3 Jahre) bis zu Node.js (4 Jahre). Und der Eindruck, nach Java zurückzukehren
Lesen Sie Druck und Temperatur von Raspberry Pi 3 & BMP180 mit Java ab
Erstellen Sie einen Kalender aus der Kalenderklasse, indem Sie das Jahr und den Monat angeben
[Gradle] Erstellen Sie ein Java-Projekt mit einer Konfiguration, die von der Konvention abweicht
Erstellen Sie mit JAVA eine unveränderliche Klasse
Rufen Sie Kotlins versiegelte Klasse von Java aus an
Verwenden Sie Java mit MSYS und Cygwin
Verteilte Ablaufverfolgung mit OpenCensus und Java
Holen Sie sich TypeElement und TypeMirror von Class
Installieren Sie Java und Tomcat mit Ansible
Code Java von Emacs mit Eclim
IP-Adresse mit Docker Bridge gestört
Verwenden Sie JDBC mit Java und Scala.
StringBuffer- und StringBuilder-Klasse in Java
Java (Klassentyp für Feld verwenden)
Folgen Sie dem Link mit Selen (Java)
PDF und TIFF mit Java 8 ausgeben
Arbeiten Sie mit Google-Tabellen aus Java
Der Weg von JavaScript nach Java
Mit Java verschlüsseln und mit C # entschlüsseln
Überlegungen und Gegenmaßnahmen, dass SSL-Kommunikationsfehler häufiger in Java 11 auftreten
Deklarieren Sie eine Methode mit einem Java-Rückgabewert mit dem Rückgabewert-Datentyp
[Java] Json von der URL mit der Standard-API (javax.script) abrufen und verarbeiten
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
Verwenden von Java mit AWS Lambda-Implementierungstipps - Abrufen des Instanznamens aus Reagion und Instanz-ID
[Java] Erstellen Sie mit dem Befehl jar eine JAR-Datei, die sowohl komprimiert als auch nicht komprimiert ist
Aktivitätsübergang mit JAVA-Klassen-Refactoring und Instanz-Experimentieren auf Android-Seite
Verwenden Sie Docker-Compose, um Ihre Lieblings-IP im Host-Netzwerk anzugeben und zu starten.