【问题标题】:to which subnet IP address belongs?属于哪个子网IP地址?
【发布时间】:2011-07-26 01:38:08
【问题描述】:

我必须用 bash 、 perl 或 python 编写脚本。 我得到了包含三列的文件(用于手动管理连接代理)

SUBNET/IP         socks_port        socks_ip 
1.2.3.*              1080             9.8.7.6
1.1.*                1080             6.8.7.6

我想知道IP地址属于哪个子网, 例如:

$ my_script  1.1.1.2

这个 IP 属于 1.1.* 子网,所以我想要返回第二行。

【问题讨论】:

  • 您是否需要支持不是 /8、/16、/24 或 /32 的子网?如果是这样,这种 x.x.x.* 格式将不适合您。例如,1.1.1.2/25 和 1.1.1.200/25 都是 1.1.1.*,但在不同的网络上。

标签: bash ip subnet


【解决方案1】:

BASH:又快又脏,用cut,然后grep覆盖文件。

PYTHON:使用ip.rsplit() 然后line.split()[].startswith() 遍历文件。

PERL:不知道。

干杯!

【讨论】:

    【解决方案2】:

    如果文件采用给定的格式(即使用 *),则使用 bash 模式匹配将其与 ip 地址进行比较会相当容易。但是,正如@Mark Drago 指出的那样,这种格式除了八位组边界子网之外的任何内容,因此如果您需要支持任意子网边界,则需要更好的格式。

    假设您使用的是“1.2.*”格式,这应该可以:

    #!/bin/bash
    ip="$1"
    found_match=false
    while read subnet socks_port socks_ip; do
        if [[ "$ip" == $subnet ]]; then  # this'll do glob-style pattern matching against $subnet
            echo "subnet=$subnet, socks_port=$socks_port, socks_ip=$socks_port"
            found_match=true
            break  # assuming you don't want to check for multiple matches
        fi
    done </path/to/subnet/file
    
    if ! $found_match; then
        echo "No match found in subnet file"
    fi
    

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2019-02-09
      • 2012-09-21
      • 2010-11-05
      • 2011-11-16
      • 2016-04-11
      • 1970-01-01
      • 2022-12-11
      • 2014-05-30
      相关资源
      最近更新 更多