子网IP地址属于哪个?

时间:2011-03-30 12:29:30

标签: bash ip subnet

我必须用bash,perl或python编写脚本。 我得到了三列文件(用于手动管理connect-proxy)

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.*子网,所以我想要回到第二行。

2 个答案:

答案 0 :(得分:1)

BASH :快速而肮脏,使用cut,然后使用grep覆盖文件。

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

PERL :不知道。

干杯!

答案 1 :(得分:0)

如果文件采用给定的格式(即使用*),则使用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