Bash Ping은 "활성" IP 주소를 반환합니다.

Bash Ping은 "활성" IP 주소를 반환합니다.

(면책 조항 - bash 쉘 스크립팅을 사용하면 이 작업을 더 쉽게 수행할 수 있다는 것을 알고 있지만 nmap연습해야 합니다.)

$ scriptname 192.168.42 18 23 

Checking: 192.168.42.18 19 20 21 22 23 

Live hosts: 
 192.168.42.21 
 192.168.42.22 

There were: 
 5 alive hosts 
 1 not alive hosts 
 found through the use of 'ping'. 

위의 출력은 다음과 같습니다. "확인 중: ..."은 확인 중인 모든 IP를 나열합니다. 모든 활성 호스트가 "활성 호스트" 아래에 나열되고 전체 활성 및 비활성 호스트가 실행됩니다.

이것이 내가 지금까지 가지고 있는 것입니다

for i in `seq ${2} ${3}`    
do
    ping -c 1 -t 1 ${1}.${i} > /dev/null 2>&1;
    if [ $? -eq 0 ]; then
        echo "Live hosts: \n ${1}.${i}"; LIVECOUNT=$( ???? )
    fi
done

왜냐하면 LIVECOUNT=$( ???? )무엇을 넣어야 할지 모르기 때문이죠. 살아있는/무생물의 누계를 어떻게 유지하는지 모르겠습니다. 확인이 완료될 때까지 "Live Host" 및 "Has" 섹션이 나타날 필요가 없습니다.

답변1

첫 번째 질문에 대한 짧은 대답은 입니다 LIVECOUNT=$((LIVECOUNT+1)). 이 산술 확장은 이중 괄호 $(())로 표시되며 변수 LIVECOUNT는 ping 명령이 0을 성공적으로 반환할 때마다 증가됩니다.

총 호스트 수를 계산하는 간단한 방법은 상위 주소(${3})에서 하위 주소(${2})를 뺀 다음 1을 더하여 총 호스트 수를 구하는 것입니다.

그래서:

#!/bin/bash
CHECKING=${1}.
LIVEHOSTS=""
LIVECOUNT=0
TOTALHOSTS=$(($3 - $2 + 1))
for i in `seq ${2} ${3}`
do
    CHECKING="$CHECKING${i} "
    ping -c 1 -t 1 ${1}.${i} > /dev/null 2>&1;
    if [ $? -eq 0 ]; then
        LIVEHOSTS="$LIVEHOSTS \n ${1}.${i}"
        LIVECOUNT=$((LIVECOUNT+1))
    fi
done
echo ""
echo "Checking: $CHECKING"
echo ""
echo "Live hosts:"
echo -e "$LIVEHOSTS"
echo ""
echo "There were:"
echo "$LIVECOUNT alive hosts"
echo "$((TOTALHOSTS - $LIVECOUNT)) not alive hosts"
echo "found through the use of ping"

다음 사항에 유의하십시오. $CHECKING은 매개변수 1 ${1}에 의해 제공된 서브넷으로 시작하고 do 루프가 반복될 때마다 현재 호스트 번호 ${i}를 추가하는 문자열입니다.

형식이 지정된 방식("라이브 호스트:" 줄 앞에 "체크:" 줄 추가)으로 인해 라이브 호스트를 문자열($CHECKING과 유사)로 유지하는 것이 더 쉬워 보이며 이것이 $LIVEHOSTS의 의미입니다.

$LIVEHOSTS 및 $LIVECOUNT는 무슨 일이 일어나고 있는지 명확히 하기 위해 공백과 0으로 초기화됩니다. 이는 필수 사항이 아닙니다.

$LIVEHOSTS를 출력할 때 echo -e 사용에 유의하세요. 이는 \n이 개행 문자로 작동할 수 있도록 하기 위한 것입니다.

편집: 끝에 있는 목록 대신 현재 확인 중인 IP를 표시하려면 해당 행을 교체 CHECKING="$CHECKING${i} "하고 echo "Checking $CHECKING${i}"제거하거나 주석 처리하세요 echo "Checking: $CHECKING". echo그랬기 때문에~에루프 내부에서는 do$i의 현재 값을 사용하여 각 패스마다 인쇄합니다. (이것은 echo "Live hosts"원본 스크립트에서 사용한 것에 대해 @slm이 지적한 것과 동일합니다 .)

관련 정보