📜  确定 IPv4 地址的类别、网络和主机 ID 的程序

📅  最后修改于: 2022-05-13 01:57:03.242000             🧑  作者: Mango

确定 IPv4 地址的类别、网络和主机 ID 的程序

给定一个字符串形式的有效 IPv4 地址,它遵循全类寻址。任务是确定给定 IPv4 地址的类别,并将网络和主机 ID 部分与其分开。

例子:

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

方法

  1. 确定类别:这个想法是检查 IP 地址的第一个八位字节。我们知道,对于A类,第一个八位字节的范围是1 – 126 ,对于B类,第一个八位字节的范围是128 – 191 ,对于C类,第一个八位字节的范围是192-223 ,对于D类,第一个八位字节的范围是224 – 239 ,对于E类,第一个八位字节的范围为240 – 255
  2. 用于确定网络和主机 ID:我们知道A类的子网掩码是8B类是16C类是24 ,而D类和E类不分为网络和主机 ID。
    对于第二个示例,第一个八位字节是 130。因此,它属于B类。 B 类的子网掩码为 16。因此,前 16 位或前两个八位字节是网络 ID 部分,其余的是主机 ID 部分。
    因此,网络 ID 为130.45 ,主机 ID 为151.154
C
// C program to determine class, Network
// and Host ID of an IPv4 address
#include
#include
 
// 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


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 seperate(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)


输出:

Given IP address belongs to Class C
Network ID is 192.226.12
Host ID is 11