子网IP地址属于哪个?

我必须用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.*
子网所以我想要回到第二行。     
已邀请:
BASH:快速又脏,使用
cut
,然后使用
grep
覆盖文件。 PYTHON:使用
ip.rsplit()
然后
line.split()[].startswith()
遍历文件。 PERL:不知道。 干杯!     
如果文件采用给定的格式(即使用*),则使用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
    

要回复问题请先登录注册