查找某ip是否在设定网段中
现有某个ip:192.168.103.2
判断该ip是否在设定网段中。设定的网段各式如下:
10.1.2.3/22
请大侠给点思路!多谢!
[解决办法]
一种简单方法,就是把IP的4数字写为二进制(32位),再与掩码(位数)掩如:
10.1.2.3 二进制 00001010 000000001 00000010 00000011
//前面为1(22) 11111111 111111111 11111100 00000000
结果为: 00001010 000000001 00000000 00000000
如果某IP与这掩码与后,结果相同,在同一网段,否则不在同一网段
如:10.1.2.3/22与10.1.3.248在同一网段 与 10.1.4.2不在同一网段
[解决办法]
楼上正解
[解决办法]
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int main(){ const char *ip = "192.168.103.2"; const char *netmask = "10.1.2.3"; struct in_addr ip_addr,mask_addr; if(inet_pton(AF_INET, ip, (void*)&ip_addr) <= 0 || inet_pton(AF_INET, netmask, (void*)&mask_addr) <= 0) { perror("inet_pton failed"); exit(1); } unsigned int *ip_ptr = (unsigned int*)&ip_addr; unsigned int *mask_ptr = (unsigned int*)&mask_addr; unsigned int net_num = (*ip_ptr) & (*mask_ptr); //网络号 //两个网络号如果相同则在一个网内 return 0;}
[解决办法]