к какой IP-адрес подсети принадлежит? - PullRequest
0 голосов
/ 30 марта 2011

Я должен написать скрипт на 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 ]

1 голос
/ 30 марта 2011

BASH : быстро и грязно, используйте cut, затем grep поверх файла.

PYTHON : используйте ip.rsplit(), а затем line.split()[].startswith(), просматривая файл.

PERL : без понятия.

Ура!

0 голосов
/ 30 марта 2011

Если файл в заданном формате (т. Е. С использованием *), будет достаточно легко использовать сопоставление с шаблоном 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
...