Bashでカールリクエストスクリプトを書く

Bashでカールリクエストスクリプトを書く

与えられたもの:

統計サーバは、特定の範囲内の所与の規則に一致するIPアドレスの数に応答する。

次のパターンを使用してhttpを介してサーバーに接続します。

curl http://server/p?q=(rule)+range%3A[1.0.0.0 to 1.255.255.255]

サーバーは応答を生成します。

10,250

問題は次のとおりです。

ルールに対応する900-1000(厳密)サーバーを含むIPサブスコープのリストを取得する最小のbashスクリプトコードは何ですか(つまり、ルールはサーバータイプです)。

結局のところ、私に必要なのは、グローバル範囲1.0.0.0〜1.255.255.255(元のサーバーに提供)内のサブ範囲のリスト(例:1.0.0.0 - 1.10.200.255)の出力です。ルール900~1000項目間。

例えば、私はこうします。

./script.sh ftp 1.0.0.0 1.255.255.255

私は以下を受け取ると思います:


1.0.0.0         1.10.200.255    967 (should be 900< <1000) 

1.10.200.255    1.50.230.255    935 (should be 900< <1000)

...

1.200.255.255   1.255.255.255   951 (the last one could be any <1000)

合計は初期データと同じでなければなりません。 10,250=967+935+...+951

つまり、グローバルIP範囲を900から1000の結果を含むより短いサブ範囲に分割する必要があります。これはIPサブスコープの無差別代入技術を暗示しているようですが、これを達成する方法は明確ではありません。

ベストアンサー1

たぶんそんなことでしょうか?

#!/bin/bash
MY_INPUT=${@:-$(</dev/stdin)}
printf '%s\n' $MY_INPUT \
  | xargs -n2 \
  | while read LOWER UPPER; do
    printf '%s %s %s\n' \
      "$LOWER" "$UPPER" "$(curl http://server/p?q=(rule)+range%3A[$LOWER to $UPPER])" 
    done \
    | awk '{SUM+=$3; print $0} END {print "Total : " SUM}' \
    | column -t

範囲を入力してください。

範囲を含むファイルがある場合、各行には下限と上限があります。

1.1.1.1 1.2.3.4
4.5.6.7 8.9.10.11

...あなたはできますscript.sh < file_with_ranges.txt

それともできます。script.sh 1.0.0.0 1.10.200.255 1.10.200.255 1.50.230.255

MY_INPUT=${@:-$(</dev/stdin)}少し魔法です。スクリプトがstdinの値または位置引数を受け入れるようにします。
xargsパラメータを2つのペアに分割します。
ループwhileは値を読み取り、印刷した後に数字で応答するサーバーを呼び出します。
awkサーバーから返された数値の合計を取得し、すべての行が処理された後に合計を印刷します。
column -tテーブルを作成します。

testだからこんなファイルがあれば..

1.0.0.0         1.10.200.255
1.10.200.255    1.50.230.255
1.200.255.255   1.255.255.255

実行すると、script.sh < test次の出力が表示されます。

1.0.0.0        1.10.200.255   967
1.10.200.255   1.50.230.255   935
1.200.255.255  1.255.255.255  951
Total          :              2853

おすすめ記事