Linux shell IPV4子网判断实现

源代码:(及测试用例)

#!/bin/bash

ip_in_subnet() {
    ip=$1
    subnet=$2

    IFS='/' read -r network cidr <<< "$subnet"

    # 将IP地址转换为32位整数
    ip_decimal=$(IFS=. read a b c d <<< $ip; echo $((a * 256 ** 3 + b * 256 ** 2 + c * 256 + d)))

    # 计算子网地址和掩码的32位整数
    IFS=. read -r -a network_octets <<< "$network"
    network_decimal=$((${network_octets[0]} * 256 ** 3 + ${network_octets[1]} * 256 ** 2 + ${network_octets[2]} * 256 + ${network_octets[3]}))
    cidr_decimal=$((2 ** (32 - $cidr) - 1))
    subnet_decimal=$(($network_decimal + $cidr_decimal))

    if [ $ip_decimal -ge $network_decimal ] && [ $ip_decimal -le $subnet_decimal ]; then
        echo "$ip 在子网 $subnet 中"
    else
        echo "$ip 不在子网 $subnet 中"
    fi
}

# 判断IP地址是否在子网中
ip_in_subnet "192.168.1.5" "192.168.1.0/24"
ip_in_subnet "192.168.2.7" "192.168.1.0/24"

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值