首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

查找某ip是否在设定网段中解决思路

2012-03-08 
查找某ip是否在设定网段中现有某个ip:192.168.103.2判断该ip是否在设定网段中。设定的网段各式如下:10.1.2.

查找某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不在同一网段
[解决办法]
楼上正解
[解决办法]

C/C++ code
#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;}
[解决办法]
探讨

C/C++ code
#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";
……

[解决办法]
看前22位是否相同!

热点排行