判断一个IP地址是否是内网地址

本文介绍了一个用于调整IP地址格式的函数,并提供了一个判断给定IP地址是否为内网地址的方法。该方法首先调整输入的IP地址格式,然后通过比较调整后的IP地址与特定范围内的内网地址来判断其是否属于内网。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void vAdjustIP(std::string& paraStrIP)
{
	std::string strTemp[5] ;
	int i = 0 ;
	
	strTemp[i] = strtok((char*)paraStrIP.c_str(), ".") ;
	while (!strTemp[i].empty())
	{
		// 进行处理
		if (1 == strTemp[i].size())
		{
			strTemp[i].insert(0, 2, '0') ;
		}
		else if (2 == strTemp[i].size())
		{
			strTemp[i].insert(0, 1, '0') ;
		}
		if (3 == i)
		{// 因为最后返回的是NULL,而string不能接收NULL参数,所以就此跳出
			break ;
		}
		strTemp[++i] = strtok(NULL, ".")  ;
	}

	paraStrIP.erase() ;
	for (i = 0; i < 4; ++i)
	{
		paraStrIP += strTemp[i] ;
		if (3 != i)
		{
			paraStrIP += "." ;
		}
	}
}

// 判断地址是否为内网地址
// 内网地址有三种呈现形式
// 1.	10.X.X.X
// 2.	172.16.X.X 到 172.31.X.X
// 3.	192.168.XX
// 注:传进来的strIP必须是 XXX.XXX.XXX.XXX 格式,必须保留三,这是为了方便比较
BOOL fIsInnerIp(const std::string& strIP)
{
	std::string str10From("010.000.000.0000") ;
	std::string str10To("010.255.255.255") ;

	std::string str172From("172.016.000.000") ;
	std::string str172To("172.031.000.000") ;

	std::string str192From("192.168.000.000") ;
	std:;string str192To("192.168.255.255") ;

	std::string strIPTemp = strIP ;
	vAdjustIP(strIPTemp) ;

	if (strIPTemp >= str10From && strIPTemp <= str10To)
	{
		return TRUE ;
	}
	else if (strIPTemp >= str172From && strIPTemp <= str172To)
	{
		return TRUE ;
	}
	else if(strIPTemp >= str192From && strIPTemp <= str192To)
	{
		return TRUE ;
	}
	return FALSE ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值