加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ip.c 1.21 KB
一键复制 编辑 原始数据 按行查看 历史
yuetan 提交于 2020-10-18 18:51 . add ip.c.
#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;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化