2011-03-30 99 views
0

我必須在bash,perl或python中編寫腳本。 我的文件有三列(對於手動管理連接代理)子網IP地址屬於哪個?

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.*子網所以我想回到第二線。

+0

你需要支持非/ 8/16/24或/ 32子網?如果是這樣,這個x.x.x. *格式不適合你。例如,1.1.1.2/25和1.1.1.200/25都是1.1.1。*,但位於不同的網絡上。 – 2011-03-30 14:21:21

回答

1

BASH:快速和骯髒,使用cut,然後grep在文件上。

PYTHON:使用ip.rsplit(),然後line.split()[].startswith()遍歷該文件。

PERL:不知道。

乾杯!

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