1. 程式人生 > 其它 >C語言實現通過IP和子網掩碼計算網路號

C語言實現通過IP和子網掩碼計算網路號

技術標籤:CC網路號

想找個現成的直接用都找不到,只好自己寫了
直接上碼

1.c

// 編譯 gcc 1.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 通過IP地址和子網掩碼計算網路號,傳入正確的ip,正確的netmask,網路號,網路號長度。 成功返回1,失敗返回0
int ip_netmask_to_NSID(char* ip, char* netmask, char* NSID, int size)
{
    int ip_len = 0;
    int netmask_len =
0; int temp_len = 0; int temp_len2 = 0; int ip_arr[4] = {0}; int netmask_arr[4] = {0}; int NSID_arr[4] = {0}; int i = 0; char temp_str[4] = {0}; char NSID_str[16] = {0}; char* p_ip = ip; char* p_netmask = netmask; // 臨時指標 char* temp = NULL; // 4次迴圈依次獲取每位ip for
(i = 0; i < 4; i++) { // printf("i=%d\n", i); ip_len = strlen(p_ip); // 獲取'.'首次出現的位置 if(i != 3) { temp = strchr(p_ip, '.'); if(NULL == temp) { return 0; } } else {
temp = p_ip; } temp_len = strlen(temp); // printf("temp_len=%d\n", temp_len); // 計算第一位ip的長度 if(i != 3) { temp_len2 = ip_len - temp_len; } else { temp_len2 = temp_len; } // printf("temp_len2=%d\n", temp_len2); // 字串擷取 memset(temp_str, 0, sizeof(temp_str)); strncpy(temp_str, p_ip, temp_len2); // 存入陣列 ip_arr[i] = atoi(temp_str); // printf("ip_arr[%d]=%d\n", i, ip_arr[i]); // 前3個進行指標偏移 if(i != 3) { p_ip += (temp_len2 + 1); } } temp = NULL; temp_len = 0; temp_len2 = 0; // 4次迴圈依次獲取每位netmask for(i = 0; i < 4; i++) { // printf("i=%d\n", i); netmask_len = strlen(p_netmask); // 獲取'.'首次出現的位置 if(i != 3) { temp = strchr(p_netmask, '.'); if(NULL == temp) { return 0; } } else { temp = p_netmask; } temp_len = strlen(temp); // printf("temp_len=%d\n", temp_len); // 計算netmask的長度 if(i != 3) { temp_len2 = netmask_len - temp_len; } else { temp_len2 = temp_len; } // printf("temp_len2=%d\n", temp_len2); // 字串擷取 memset(temp_str, 0, sizeof(temp_str)); strncpy(temp_str, p_netmask, temp_len2); // 存入陣列 netmask_arr[i] = atoi(temp_str); // printf("netmask_arr[%d]=%d\n", i, netmask_arr[i]); // 前3個進行指標偏移 if(i != 3) { p_netmask += (temp_len2 + 1); } } temp = NULL; // 計算各位網路號 for(i = 0; i < 4; i++) { NSID_arr[i] = ip_arr[i] & netmask_arr[i]; } // 拼接為完整的網路號 snprintf(NSID_str, 15, "%d.%d.%d.%d", NSID_arr[0], NSID_arr[1], NSID_arr[2], NSID_arr[3]); strncpy(NSID, NSID_str, size); return 1; } int main() { char ip1[16] = "192.168.10.1"; char netmask1[16] = "255.255.255.0"; char ip2[16] = "192.168.10.100"; char netmask2[16] = "255.255.255.224"; char ip3[16] = "192.168.10.200"; char netmask3[16] = "255.255.255.255"; char NSID[16] = {0}; if(0 == ip_netmask_to_NSID(ip1, netmask1, NSID, 15)) { printf("0\n"); } else { printf("NSID:%s\n", NSID); } if(0 == ip_netmask_to_NSID(ip2, netmask2, NSID, 15)) { printf("0\n"); } else { printf("NSID:%s\n", NSID); } if(0 == ip_netmask_to_NSID(ip3, netmask3, NSID, 15)) { printf("0\n"); } else { printf("NSID:%s\n", NSID); } return 0; }

效果如下

在這裡插入圖片描述