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