Programa para determinar la clase, Red y Host ID de una dirección IPv4

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 

  1. 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
     
  2. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *