ping 스캔을 위한 bash 스크립트를 작성했지만 다운된 호스트의 경우 시간이 더 걸리기 때문에 &
마지막에 get_ip 함수를 사용하여 멀티스레딩을 시도했습니다. 그러나 이것은 작동하지 않는 것 같습니다. 이를 더 빠르게 달성하려면 어떻게 스크립트를 작성해야 합니까?
#!/bin/bash
get_ip () {
ping -c 1 $1.$i 1>/dev/null
if [ $? -eq 0 ] ; then
echo "Host $1.$i is up"
else
echo "$1.$i is down"
fi
}
if [ $1 ];then
for i in {0..255};
do
get_ip "$1" &
done
else
echo "Enter the IP address to scan"
fi
답변1
이 속도에는 문제가 없다고 생각합니다. 그것은 매우 빠르게 잘못된 일을 합니다. 문제는 변수 이름입니다. i
그리고 1
매우 비슷해 보입니다. 혼동하지 마십시오.
function 내에는 스크립트 입력이 아닌 $1
함수 입력(예: 명령줄 인수) 도 있습니다.
이제 몇 가지 수정사항을 적용해 보겠습니다.
이제 함수는 입력(전체 IP 주소)을 사용합니다.
#!/bin/bash
get_ip () {
ping -c 1 $1 1>/dev/null
if [ $? -eq 0 ] ; then
echo "Host $1 is up"
else
echo "$1 is down"
fi
}
이제 main은 함수에 전달할 완전한 IP 주소를 생성합니다.
if [ $1 ];then
for i in {0..255};
do
get_ip "$1.$i" &
done
else
echo "Enter the first 3 octets of the IP address to scan, as the 1st argument of this script."
fi