当前位置: 首页 > news >正文

判断两个 IP 地址是否在同一子网 C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>

// 将点分十进制的 IP 地址转换为 32 位无符号整数
unsigned int ip_to_uint(const char *ip) {
    struct in_addr addr;
    if (inet_pton(AF_INET, ip, &addr) <= 0) {
        fprintf(stderr, "Invalid IP address: %s\n", ip);
        return 0;
    }
    return ntohl(addr.s_addr);
}

// 判断两个 IP 地址是否在同一子网
int is_same_subnet(const char *ip1, const char *ip2, const char *subnet_mask) {
    unsigned int ip1_int = ip_to_uint(ip1);
    unsigned int ip2_int = ip_to_uint(ip2);
    unsigned int mask_int = ip_to_uint(subnet_mask);

    if (ip1_int == 0 || ip2_int == 0 || mask_int == 0) {
        return 0;
    }

    // 计算网络地址
    unsigned int network1 = ip1_int & mask_int;
    unsigned int network2 = ip2_int & mask_int;

    return network1 == network2;
}

int main() {
    const char *ip1 = "192.168.1.100";
    const char *ip2 = "192.168.1.200";
    const char *subnet_mask = "255.255.255.0";

    if (is_same_subnet(ip1, ip2, subnet_mask)) {
        printf("%s 和 %s 属于同一子网。\n", ip1, ip2);
    } else {
        printf("%s 和 %s 不属于同一子网。\n", ip1, ip2);
    }

    return 0;

相关文章:

  • Redis实现分布式定时任务
  • 畅游Diffusion数字人(23):字节最新表情+动作模仿视频生成DreamActor-M1
  • dfs和bfs算法
  • PyTorch DataLoader 参数详解
  • Autoware源码总结
  • 路由策略/策略路由之Filter-Policy
  • 基础层数据从kafka读取写入hbase的优化方案
  • 摄像头解析
  • 第一期:[特殊字符] 深入理解MyBatis[特殊字符]从JDBC到MyBatis——持久层开发的转折点[特殊字符]
  • Vue 3 和 Vue 2 的区别及优点
  • Flask+Plotly结合动态加载图形页面实践
  • cluster、update、delete在死元组清理上的作用
  • boss zp_stoken补环境
  • TQ15EG开发板教程:AD9361观测adc采集波形
  • Elasticsearch 系列专题 - 第七篇:实战项目
  • Ubuntu 22.04 完美安装 ABAQUS 教程:从零到上手,解决兼容问题
  • 数据结构(1)
  • Outbound Email的未来:从冷启动邮件到智能化营销
  • 使用 TFIDF+分类器 范式进行企业级文本分类(二)
  • 什么是柜台债
  • 做网站单页/指数基金有哪些
  • 四川泸州做网站的公司有哪些/关键词排名优化官网
  • 网站地址结构/微信推广多少钱一次
  • 网上购物的网站有哪些/seo网站建设优化
  • 网站是怎么搭建的/如何做电商 个人
  • perl网站建设/搜索引擎优化是什么