Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java [décoction n ° 2]

en premier

J'ai décidé d'utiliser un serveur cloud et, heureusement, j'ai obtenu une adresse IP globale. Afin de séparer le traitement entre le PC interne (IP privée) et le serveur cloud (IP globale), il est désormais possible de déterminer la classe d'adresse et l'IP privée de l'IP.

(Histoire originale) Obtention de la classe d'adresse et du type d'adresse à partir de l'adresse IP avec Java

(référence) Adresse IP-Wikipedia

la mise en oeuvre

IPAddressInfo.java


public class IPAddressInfo {

	public enum AddressClass{
		ClassA(128) {
			@Override
			protected boolean isPrivate(int first, int second) {
				return first == 10;
			}
		},
		ClassB(128 + 64) {
			@Override
			protected boolean isPrivate(int first, int second) {
				return first == 172 && (16 <= second && second <= 31);
			}
		},
		ClassC(128 + 64 + 32) {
			@Override
			protected boolean isPrivate(int first, int second) {
				return first == 192 && second == 168;
			}
		},
		ClassD(128 + 64 + 32 + 16) {
			@Override
			protected boolean isPrivate(int first, int second) {
				return false;
			}
		},
		ClassE(256) {
			@Override
			protected boolean isPrivate(int first, int second) {
				return false;
			}
		},;

		private final int outOfNo;

		/**
		 *Cinq classes d'adresses d'adresses IP.
		 * @param outOfNo La première adresse IP de la classe d'adresse suivante
		 */
		private AddressClass(int outOfNo){
			this.outOfNo = outOfNo;
		}

		protected abstract boolean isPrivate(int first, int second);
	}

	public AddressClass getAddressClass(int first){
		return  Arrays.stream(AddressClass.values()).filter(p -> first < p.outOfNo).findFirst().orElseThrow(() -> new IllegalArgumentException("Aucun conseil:" + first));
	}

	public AddressClass getAddressClass(String ip){
		List<String> addressList = Arrays.asList(ip.split("\\."));
		return getAddressClass(Integer.valueOf(addressList.get(0)));
	}

	public boolean isPrivate(String ip){
		List<String> addressList = Arrays.asList(ip.split("\\."));
		int first = Integer.valueOf(addressList.get(0));
		int second = Integer.valueOf(addressList.get(1));
		return getAddressClass(first).isPrivate(first, second);
	}
}

tester

IPAddressInfo.java


	@Test
	public void getAddressClass(){
		assertThat(getAddressClass("0.0.0.0"), is(AddressClass.ClassA));
		assertThat(getAddressClass("10.0.0.0"), is(AddressClass.ClassA));
		assertThat(getAddressClass("10.255.255.255"), is(AddressClass.ClassA));
		assertThat(getAddressClass("127.255.255.255"), is(AddressClass.ClassA));

		assertThat(getAddressClass("128.0.0.0"), is(AddressClass.ClassB));
		assertThat(getAddressClass("172.16.0.0"), is(AddressClass.ClassB));
		assertThat(getAddressClass("172.31.255.255"), is(AddressClass.ClassB));
		assertThat(getAddressClass("191.255.255.255"), is(AddressClass.ClassB));

		assertThat(getAddressClass("192.0.0.0"), is(AddressClass.ClassC));
		assertThat(getAddressClass("192.168.0.0"), is(AddressClass.ClassC));
		assertThat(getAddressClass("192.168.255.255"), is(AddressClass.ClassC));
		assertThat(getAddressClass("223.255.255.255"), is(AddressClass.ClassC));

		assertThat(getAddressClass("224.0.0.0"), is(AddressClass.ClassD));
		assertThat(getAddressClass("239.255.255.255"), is(AddressClass.ClassD));

		assertThat(getAddressClass("240.0.0.0"), is(AddressClass.ClassE));
		assertThat(getAddressClass("255.255.255.255"), is(AddressClass.ClassE));
	}

	@Test
	public void isPrivate(){
		assertThat(isPrivate("0.0.0.0"), is(false));
		assertThat(isPrivate("10.0.0.0"), is(true));
		assertThat(isPrivate("10.255.255.255"), is(true));
		assertThat(isPrivate("127.255.255.255"), is(false));

		assertThat(isPrivate("128.0.0.0"), is(false));
		assertThat(isPrivate("172.16.0.0"), is(true));
		assertThat(isPrivate("172.31.255.255"), is(true));
		assertThat(isPrivate("191.255.255.255"), is(false));

		assertThat(isPrivate("192.0.0.0"), is(false));
		assertThat(isPrivate("192.168.0.0"), is(true));
		assertThat(isPrivate("192.168.255.255"), is(true));
		assertThat(isPrivate("223.255.255.255"), is(false));

		assertThat(isPrivate("224.0.0.0"), is(false));
		assertThat(isPrivate("239.255.255.255"), is(false));

		assertThat(isPrivate("240.0.0.0"), is(false));
		assertThat(isPrivate("255.255.255.255"), is(false));
	}

	@Test(expected=IllegalArgumentException.class)
	public void error(){
		getAddressClass("256.255.255.255");
	}

Recommended Posts

Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java [décoction n ° 2]
Trouvez la classe d'adresse et le type d'adresse à partir de l'adresse IP avec Java
Obtenir le pays à partir de l'adresse IP (Java)
[Java] Comment convertir du type String en type Path et obtenir le chemin
[Java] Obtenez la date avec la classe LocalDateTime
<java> Fractionner l'adresse avant et après l'adresse avec une expression régulière
[Java] Réglez l'heure depuis le navigateur avec jsoup
Incrémenté du troisième argument de la méthode iterate de la classe Stream ajoutée depuis Java9
"Programmation réseau TCP / IP JAVA comprise depuis les bases" Compilé avec Eclipse. Déboguer avec Wireshark.
Ressentez facilement le type de base et le type de référence avec ruby
Écrivez ABNF en Java et transmettez l'adresse e-mail
Langage Java du point de vue de Kotlin et C #
[Java] Obtenez la date 10 jours plus tard avec la classe Calendar
Ressentez facilement le type de base et le type de référence avec ruby 2
Préparer l'environnement pour java11 et javaFx avec Ubuntu 18.4
Champ de type de classe Java
Je veux renvoyer un type différent de l'élément d'entrée avec Java8 StreamAPI Reduce ()
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Différence entre Java et JavaScript (comment trouver la moyenne)
Qu'est-ce que la classe LocalDateTime? [Java débutant] -Date et classe d'heure-
Implémentez l'interface Java dans la classe JRuby et appelez-la depuis Java
Réglez la date et l'heure à partir de la chaîne de caractères avec POI
Découvrez tous les ID de fuseau horaire pris en charge par la classe Java TimeZone
Corrigez le code de caractère en Java et lisez à partir de l'URL
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Définition et instanciation de classe Java
Rechercher et exécuter une méthode à partir d'une instance avec traitement (java)
Installez le plugin memcached sur MySQL et accédez à partir de Java
Comment définir l'adresse IP et le nom d'hôte de CentOS8
Je veux revenir à l'écran précédent avec kotlin et java!
[Android, Java] Méthode pour trouver la date écoulée à partir de deux dates
Note n ° 2 "Création d'un historique de recherche avec ArrayList et HashSet" [Java]
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
De Java naissant (3 ans) à Node.js (4 ans). Et l'impression de retourner à Java
Lire la pression et la température de Raspberry Pi 3 et BMP180 avec Java
Créez un calendrier à partir de la classe Calendar en spécifiant l'année et le mois
[Gradle] Construisez un projet Java avec une configuration différente de la convention
Prise en compte et contre-mesures selon lesquelles les erreurs de communication SSL sont plus susceptibles de se produire à partir de Java 11