Les informations suivantes sont affichées à partir de l'adresse IP spécifiée par l'argument (un seul). ・ Classe d'adresse (classe A ou classe B ou classe C ou classe D) ・ Adresse IP globale ou adresse IP privée
Il est téléchargé sur GitHub. → ipAddressInfo Je ne l'ai pas tellement testé, donc il y a peut-être un mauvais codage ... Si vous trouvez quelque chose qui ne va pas avec le code ou une amélioration, veuillez nous en informer dans les commentaires ou modifier la demande.
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) {
//Vérification des arguments
if (args.length != 1) {
System.out.println("Spécifiez l'adresse IP dans l'argument.");
System.exit(1);
}
//Expression régulière pour la détermination de l'adresse IP
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("Classe A", "Adresse IP privée");
} else {
showResult("Classe A", "Adresse IP globale");
}
break;
case CLASS_B_PREFIX:
if (isPrivateAddress(addressList, CLASS_B_PREFIX)) {
showResult("Classe B", "Adresse IP privée");
} else {
showResult("Classe B", "Adresse IP globale");
}
break;
case CLASS_C_PREFIX:
if (isPrivateAddress(addressList, CLASS_C_PREFIX)) {
showResult("Classe C", "Adresse IP privée");
} else {
showResult("Classe C", "Adresse IP globale");
}
break;
case CLASS_D_PREFIX:
System.out.println("Classe D.");
break;
default:
System.out.println("Une adresse qui n'appartient à aucune classe.");
break;
}
} else {
System.out.println("Il ne suit pas le format de l'adresse IP.");
System.exit(1);
}
}
/**
*Convertir de décimal en binaire
* @param decimalAddress Adresse décimale
* @return Valeur obtenue en convertissant un nombre décimal en nombre binaire
*/
private static String getBinaryAddress(String decimalAddress) {
return String.format("%8s", Integer.toBinaryString(Integer.valueOf(decimalAddress))).replace(" ", "0");
}
/**
*Déterminez à quelle classe il appartient
* @param binaryAddress Adresse binaire
* @Préfixe pour chaque classe de retour, si elle n'appartient à aucune classe"1"rends le
*/
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";
}
}
/**
*Déterminez si l'adresse IP appartenant à la classe d'adresses de la classe A à la classe C est une IP globale ou une IP privée
* @param classPrefix
* @return Renvoie vrai pour les adresses IP privées, faux sinon
*/
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:
//La plage d'adresses IP privées de classe A est
// 10.0.0.0 ~ 10.255.255.255
if (firstSet == 10) {
return true;
}
break;
case CLASS_B_PREFIX:
//La plage d'adresses IP privées de classe B est
// 172.16.0.0 ~ 172.31.255.255
if (firstSet == 172 && (16 <= secondSet && secondSet <= 31)) {
return true;
}
break;
case CLASS_C_PREFIX:
//La plage d'adresses IP privées de classe C est
// 192.168.0.0 ~ 192.168.255.255
if (firstSet == 192 && secondSet == 168) {
return true;
}
break;
case CLASS_D_PREFIX:
//La classe D est pour la multidiffusion, il n'y a donc pas de concept de global ou privé
break;
default:
return false;
}
return false;
}
/**
*Afficher le résultat d'identification de l'adresse IP
* @param addressClass nom de classe d'adresse IP
* @param addressStatus Adresse IP globale ou adresse IP privée
*/
private static void showResult(String addressClass, String addressStatus) {
System.out.println(addressClass + "Et" + addressStatus + "est.");
}
}
> java pk.Main 208.77.188.166
Classe C et adresse IP globale.
Correspondance IP avec l'expression régulière -Regexp Expression régulière qui oblige Hidemaru à rechercher l'adresse IP Adresse IP-Wikipedia [2018 [Spring] [Autumn] Applied Information Engineer Passed Textbook (Information Processing Engineer Examination)](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 & mots-clés =% E5% BF% 9C% E7% 94% A8% E6% 83% 85 % E5% A0% B1% E6% 8A% 80% E8% A1% 93% E8% 80% 85)
Prenez la qualification d'information sur l'application en avril de cette année. Si vous réussissez, vous obtiendrez une récompense de l'entreprise, alors achetez un costume et une PS Vita!
Recommended Posts