在 bash 中编写curl请求脚本

在 bash 中编写curl请求脚本

给出了什么:

统计服务器,回复某个范围内有多少个 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将参数分成两对。
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

相关内容