주어진 것:
통계 서버는 특정 범위에서 주어진 규칙과 일치하는 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