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매개변수를 두 쌍으로 나눕니다.
루프 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

관련 정보