Dada una dirección IPv4 válida en forma de string y sigue el direccionamiento completo de clase . La tarea es determinar la clase de la dirección IPv4 dada, así como separar las partes de ID de red y host.
Ejemplos:
Input : 1.4.5.5 Output : Given IP address belongs to Class A Network ID is 1 Host ID is 4.5.5 Input : 130.45.151.154 Output : Given IP address belongs to Class B Network ID is 130.45 Host ID is 151.154
Acercarse
- Para determinar la clase: La idea es comprobar el primer octeto de las direcciones IP. Como sabemos, para la clase A , el primer octeto estará en el rango de 1 a 126 , para la clase B , el primer octeto estará en el rango de 128 a 191 , para la clase C , el primer octeto estará en el rango de 192 a 223 , para la clase D , el primer octeto estará en el rango de 224 a 191. 239 , para la clase E , el primer octeto oscilará entre 240 y 255 .
- Para determinar la ID de red y host: sabemos que la máscara de subred para la clase A es 8 , para la clase B es 16 y para la clase C es 24 , mientras que las clases D y E no se dividen en red e ID de host.
Para el segundo ejemplo, el primer octeto es 130. Por lo tanto, pertenece a la Clase B. La clase B tiene una máscara de subred de 16. Por lo tanto, los primeros 16 bits o los dos primeros octetos son la parte de ID de red y el resto es la parte de ID de host.
Por lo tanto, la ID de red es 130.45 y la ID de host es 151.154
C
// C program to determine class, Network // and Host ID of an IPv4 address #include<stdio.h> #include<string.h> // Function to find out the Class char findClass(char str[]) { // storing first octet in arr[] variable char arr[4]; int i = 0; while (str[i] != '.') { arr[i] = str[i]; i++; } i--; // converting str[] variable into number for // comparison int ip = 0, j = 1; while (i >= 0) { ip = ip + (str[i] - '0') * j; j = j * 10; i--; } // Class A if (ip >=1 && ip <= 126) return 'A'; // Class B else if (ip >= 128 && ip <= 191) return 'B'; // Class C else if (ip >= 192 && ip <= 223) return 'C'; // Class D else if (ip >= 224 && ip <= 239) return 'D'; // Class E else return 'E'; } // Function to separate Network ID as well as // Host ID and print them void separate(char str[], char ipClass) { // Initializing network and host array to NULL char network[12], host[12]; for (int k = 0; k < 12; k++) network[k] = host[k] = '\0'; // for class A, only first octet is Network ID // and rest are Host ID if (ipClass == 'A') { int i = 0, j = 0; while (str[j] != '.') network[i++] = str[j++]; i = 0; j++; while (str[j] != '\0') host[i++] = str[j++]; printf("Network ID is %s\n", network); printf("Host ID is %s\n", host); } // for class B, first two octet are Network ID // and rest are Host ID else if (ipClass == 'B') { int i = 0, j = 0, dotCount = 0; // storing in network[] up to 2nd dot // dotCount keeps track of number of // dots or octets passed while (dotCount < 2) { network[i++] = str[j++]; if (str[j] == '.') dotCount++; } i = 0; j++; while (str[j] != '\0') host[i++] = str[j++]; printf("Network ID is %s\n", network); printf("Host ID is %s\n", host); } // for class C, first three octet are Network ID // and rest are Host ID else if (ipClass == 'C') { int i = 0, j = 0, dotCount = 0; // storing in network[] up to 3rd dot // dotCount keeps track of number of // dots or octets passed while (dotCount < 3) { network[i++] = str[j++]; if (str[j] == '.') dotCount++; } i = 0; j++; while (str[j] != '\0') host[i++] = str[j++]; printf("Network ID is %s\n", network); printf("Host ID is %s\n", host); } // Class D and E are not divided in Network // and Host ID else printf("In this Class, IP address is not" " divided into Network and Host ID\n"); } // Driver function is to test above function int main() { char str[] = "192.226.12.11"; char ipClass = findClass(str); printf("Given IP address belongs to Class %c\n", ipClass); separate(str, ipClass); return 0; }
Java
// Java program to determine class, Network // and Host ID of an IPv4 address class NetworkId{ static String findClass(String str){ // Calculating first occurrence of '.' in str int index = str.indexOf('.'); // First octate in str in decimal form String ipsub = str.substring(0,index); int ip = Integer.parseInt(ipsub); // Class A if (ip>=1 && ip<=126) return "A"; // Class B else if (ip>=128 && ip<=191) return "B"; // Class C else if (ip>=192 && ip<223) return "C"; // Class D else if (ip >=224 && ip<=239) return "D"; // Class E else return "E"; } static void separate(String str, String ipClass){ // Initializing network and host empty String network = "", host = ""; if(ipClass == "A"){ int index = str.indexOf('.'); network = str.substring(0,index); host = str.substring(index+1,str.length()); }else if(ipClass == "B"){ //Position of breaking network and HOST id int index = -1; int dot = 2; for(int i=0;i<str.length();i++){ if(str.charAt(i)=='.'){ dot -=1; if(dot==0){ index = i; break; } } } network = str.substring(0,index); host = str.substring(index+1,str.length()); }else if(ipClass == "C"){ //Position of breaking network and HOST id int index = -1; int dot = 3; for(int i=0;i<str.length();i++){ if(str.charAt(i)=='.'){ dot -=1; if(dot==0){ index = i; break; } } } network = str.substring(0,index); host = str.substring(index+1,str.length()); }else if(ipClass == "D" || ipClass == "E"){ System.out.println("In this Class, IP address"+ " is not divided into Network and Host IDs"); return; } System.out.println("Network ID is "+network); System.out.println("Host ID is "+host); } public static void main(String[] args) { String str = "192.226.12.11"; String ipClass = findClass(str); System.out.println("Given IP address belings to Class "+ipClass); separate(str,ipClass); } }
Python3
#function to determine the class of an Ip address def findClass(ip): if(ip[0] >= 0 and ip[0] <= 127): return "A" else if(ip[0] >=128 and ip[0] <= 191): return "B" else if(ip[0] >= 192 and ip[0] <= 223): return "C" else if(ip[0] >= 224 and ip[0] <= 239): return "D" else: return "E" #function to separate network and host id from the given ip address def separate(ip, className): #for class A network if(className == "A"): print("Network Address is : ", ip[0]) print("Host Address is : ", ".".join(ip[1:4])) #for class B network else if(className == "B"): print("Network Address is : ", ".".join(ip[0:2])) print("Host Address is : ", ".".join(ip[2:4])) #for class C network else if(className == "C"): print("Network Address is : ", ".".join(ip[0:3])) print("Host Address is : ", ip[3]) else: print("In this Class, IP address is not divided into Network and Host ID") #driver's code if __name__ == "__main__": ip = "192.226.12.11" ip = ip.split(".") ip = [int(i) for i in ip] #getting the network class networkClass = findClass(ip) print("Given IP address belongs to class : ", networkClass) #printing network and host id ip = [str(i) for i in ip] separate(ip, networkClass)
Producción:
Given IP address belongs to Class C Network ID is 192.226.12 Host ID is 11
Este artículo es una contribución de Aditya Kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA