(OK) Android 内核 中,判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段
//struct sockaddr_in netaddr1, netaddr2;
//inet_aton("255.255.255.0", &netaddr1.sin_addr);
//inet_aton("112.26.0.0", &netaddr2.sin_addr);
//== 判断 srcaddr, dstaddr 是否属于 某个网段 或 同一个 网段
//== if (locaddr == 112.26.0.0/24) || ( locaddr/24 == remaddr/24 )
// if (((srcaddr.sin_addr.s_addr & netaddr1.sin_addr.s_addr) == netaddr2.sin_addr.s_addr)
// || ((srcaddr.sin_addr.s_addr & netaddr1.sin_addr.s_addr)
// == (dstaddr.sin_addr.s_addr & netaddr1.sin_addr.s_addr)))
//== netaddr1.sin_addr.s_addr, 即, inet_aton(), 可以使用 inet_addr() 代替
// if (((srcaddr.sin_addr.s_addr & inet_addr("255.255.255.0")) == inet_addr("112.26.0.0"))
// || ((srcaddr.sin_addr.s_addr & inet_addr("255.255.255.0"))
// == (dstaddr.sin_addr.s_addr & inet_addr("255.255.255.0"))))
//== Android 内核 中 没有 inet_aton(), inet_addr(), 直接 使用 IP 地址 的 十六进制表示
//== "255.255.255.0" = 0x00ffffff, "112.26.0.0" = 0x00001a70
if (((srcaddr.sin_addr.s_addr & 0x00ffffff) == 0x00001a70)
|| ((srcaddr.sin_addr.s_addr & 0x00ffffff)
== (dstaddr.sin_addr.s_addr & 0x00ffffff)))
printf("yes\n");
else
printf("no\n");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通