0

bash 、 perl 、または python でスクリプトを作成する必要があります。3列のファイルを取得しました(接続プロキシを手動で管理するため)

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 行目を戻します。

4

2 に答える 2

1

BASH : 迅速かつ汚い、を使用cutgrepてから、ファイルに対して。

PYTHON : 使用ip.rsplit()line.split()[].startswith()てから、ファイルを反復処理します。

パール: わかりません。

乾杯!

于 2011-03-30T13:44:15.983 に答える
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
于 2011-03-30T17:52:18.187 に答える