代码拉取完成,页面将自动刷新
#include <stdio.h>
#include <stdlib.h>
//IP路由查找的“最长匹配原则”
//目的IP:192.168.25.13
/* 路由表:
8.35.15.0/24
137.45.2.0/24
192.168.0.0/16
192.168.25.0/24
匹配结果应该为:192.168.25.0/24
*/
typedef struct {
int ip[4];
int mask;
} IpRouter;
unsigned int arrayIpToUint(int iparray[])
{
unsigned int res = 0;
res = (iparray[0] << 24) + (iparray[1] << 16) +(iparray[2] << 8) + iparray[3];
return res;
}
int matchIpROuter(char* ip, char* router)
{
int ipArray[4] = {0};
IpRouter ipr = {0};
sscanf(ip, "%d.%d.%d.%d", ipArray, ipArray+1, ipArray+2, ipArray+3);
sscanf(router, "%d.%d.%d.%d/%d", &(ipr.ip[0]), &(ipr.ip[1]),
&(ipr.ip[2]), &(ipr.ip[3]), &(ipr.mask));
unsigned int src = arrayIpToUint(ipArray);
unsigned int dst = arrayIpToUint(ipr.ip);
unsigned int bit = 0xFFFFFF00;
int mask = -1;
unsigned int offset = 32 - ipr.mask;
if ((src >> offset) == (dst >> offset)) {
mask = ipr.mask;
}
return mask;
}
int main() {
char ip[] = "192.168.25.13";
char router[] = "192.168.25.0/24";
int mask = matchIpROuter(ip, router);
return mask;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。