想找个现成的直接用都找不到,只好自己写了
直接上码
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;
}
效果如下