首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找IP地址并验证它在哪个子网中。

查找IP地址并验证它在哪个子网中。
EN

Stack Overflow用户
提问于 2019-01-05 17:45:26
回答 1查看 34关注 0票数 0

我们有3栋大楼,我想识别一台计算机拥有的IP,然后用一系列if/ and语句识别它的子网。

例如:

  • 建筑1= 192.168.1.1 /24
  • 建筑2= 192.168.2.1 /24
  • 建筑3= 192.168.3.1 /24

我想我已经知道如何识别计算机的IP了,现在我只需要一点帮助,弄清楚如何将一个IP地址转换成一个可以评估的数字。到目前为止,这就是我所拥有的,但我错过了如何以某种方式转换IP。

代码语言:javascript
运行
复制
#!/bin/bash

ip=192.168.1.20

building1min=192.168.1.1
building1max=192.168.1.255

building2min=192.168.2.1
building2max=192.168.2.255

building3min=192.168.3.1
building3max=192.168.3.255

if [ $ip -lt $building1max && $ip -gt $building1min ]{
    echo "User is in Building 1"
} else if [ $ip -lt $building2max && $ip -gt $building2min ]
    echo "User is in Building 2"
} else if [ $ip -lt $building3max && $ip -gt $building3min ]{
    echo "User is in Building 3"
} else {
    echo "User is not in any building"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-05 18:28:09

以下代码将指出正确的方向:

代码语言:javascript
运行
复制
#!/usr/bin/env bash

binary=( {0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1}{0..1} )

convertToBinary() {
    local -a oct
    local o res ip=$1 mask=$2 

    IFS=. read -ra oct <<< "$ip"
    for o in "${oct[@]}"; do
        res+=${binary[o]}
    done

    printf '%s\n' "${res:0:mask}"
}

isInSubnet() {
    local sub=$1 ip=$2
    local sub_ip=${sub%/*} sub_mask=${sub#*/}

    [[ $(convertToBinary "$sub_ip" "$sub_mask") = "$(convertToBinary "$ip" "$sub_mask")" ]]
}

# USAGE

ip=192.168.2.15
b1=192.168.1.0/24 b2=192.168.2.0/24

if isInSubnet "$b1" "$ip"; then
    echo building 1
elif isInSubnet "$b2" "$ip"; then
    echo building 2
fi

它首先将It转换为二进制文件,并只提取网络地址,然后检查是否相等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54054566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档