检查ip是否在范围内,如果没有掩码就是全匹配
bool isIPInRange(string strIpRange, string strip)
{
in_addr inIp, inIpRange;
uint32_t mask;
size_t nlen = 0;
nlen = strIpRange.find_first_of('/');
string StrRangeSub = strIpRange.substr(0, nlen);
if (nlen > strIpRange.length())
{
mask = 0;
}
else
{
stringstream ss(strIpRange.substr(nlen + 1, strIpRange.length()));
ss >> mask;
}
mask = 32 - mask;
inet_pton(AF_INET, strip.c_str(), &inIp);
inet_pton(AF_INET, StrRangeSub.c_str(), &inIpRange);
uint32_t hlIp = ntohl(inIp.s_addr);
uint32_t hlIpRange = ntohl(inIpRange.s_addr);
if (hlIp >> mask == hlIpRange >> mask)
{
return true;
}
return false;
}
主函数
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <iostream>
#include <sstream>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
using namespace std;
int main()
{
string strIpRange = "10.0.0.0/6";
string strip = "10.0.0.0";
bool bRet = isIPInRange(strIpRange, strip);
return bRet;
}