현재 활성 시스템을 확인하기 위해 bash에서 도구를 만들려고 합니다. 미친 복잡한 도구가 될 필요는 없습니다. 단지 내 컴퓨터가 작동 중이라는 것을 알려주는 데만 필요합니다. 나는 내 대본이 Garbo라는 것을 알고 있었습니다... 그것이 바로 내가 여기 있는 이유입니다.
#!/bin/bash
here()
{
ping -c 1 $1 > dev/null
echo "Good morning, Here are the machines that are up and running: $i"
}
for i in insert ip range
do here $i
done
답변1
nmap에 관한 몇 가지 사항을 고려하시나요?
nmap -sP 10.1.2.0/24 10.2.5.0/24
이는 핑 루프보다 간단할 수 있고 여러 호스트를 병렬로 검색할 수 있으므로 속도가 더 빠릅니다. 그러나 nmap 및 일반적인 종속성을 설치해야 하므로 상주 보안 담당자가 최악의 시나리오에 집중할 수 있습니다.
업데이트: 좋습니다. 물론 Oberleutnanten입니다.
대신에:
xargs parallel -j20 ping -c1 -- | grep 'bytes from'
좋다
echo 10.0.{1..2}.{1..15} |\
xargs parallel -j20 ping -c1 -- | grep 'bytes from'
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.150 ms
64 bytes from 10.0.2.4: icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.138 ms
대부분의 시간이 핑이 즉시 종료되기를 기다리는 데 소비되므로 타이밍도 좋습니다. 곧 긍정적인 결과가 나올 것입니다.
$ time (echo 10.0.{1..2}.{1..15} | xargs parallel -j30 ping -c1 -- | grep 'bytes from')
64 bytes from 10.0.2.15: icmp_seq=1 ttl=64 time=0.016 ms
64 bytes from 10.0.2.3: icmp_seq=1 ttl=64 time=0.150 ms
64 bytes from 10.0.2.4: icmp_seq=1 ttl=64 time=0.176 ms
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.138 ms
real 0m10.030s
user 0m0.019s
sys 0m0.018s
Winbox도 스니핑하려면 ping을 싫어하는 arping 및 특정 매개변수를 ping으로 바꾸십시오.
좀 더 멋지게 만들고 싶다면 cheesy grep을 awk '/bytes from/{print $4}'로 바꾸세요.
의심할 바 없이 다른 사람들의 아이디어는 훌륭한 퀴즈 제출처럼 보였고 내 아이디어는 드라이버로 못을 박는 것처럼 보였지만 빠르고 쉬웠습니다.
답변2
이와 유사한 것이 도움이 될 것입니다. IP 목록에 원하는 수의 IP를 추가하십시오.
#!/bin/bash
ips=(192.168.0.1 8.8.8.8 127.0.0.1)
here() {
ping -c 1 $1 > /dev/null
if [[ $? -eq 0 ]]
then
echo "Good morning, Here are the machines that are up and running: $i"
fi
}
for i in ${ips[@]}
do here $i
done
답변3
귀하의 IP 범위는 얼마나 큽니까?
/24에 대해 고려
for i in {1..254} ; do
if ping -c1 10.11.12.$i >/dev/null 2>/dev/null ; do
echo "10.11.12.$i is up"
else
echo "10.11.12.$i is down
fi
done
/16의 경우 두 번째 루프를 추가할 수 있습니다.
for j in {1..254} ; do
for i in {1..254} ; do
if ping -c1 10.11.$j.$i >/dev/null 2>/dev/null ; do
echo "10.11.$j.$i is up"
else
echo "10.11.$j.$i is down
fi
done
done
그런 다음 커피 몇 잔을 마시고 그것이 끝날 때까지 기다리십시오.
그러나 nmap
그것은 실제로 올바른 도구입니다.
답변4
당신을 위한.
다음과 같이 사용할 수 있습니다.
./your_script_name.sh 192.168.1.0/24
#!/bin/bash
SUBNET=$1
if [[ -z "$SUBNET" ]]; then
echo "Usage: ./your_script_name.sh <SUBNET>"
exit
fi
printsubnet() {
local OLDIFS="$IFS"
local SUB=${1/\/*/}
local MASK=$(( 1 << ( 32 - ${1/*\//} )))
IFS="."
set -- $SUB
IPS=$((0x$(printf "%02x%02x%02x%02x\n" $1 $2 $3 $4)))
IFS="$OLDIFS"
for ((N=0; N<MASK; N++))
{
VAL=$((IPS|N))
printf "%d.%d.%d.%d\n" \
$(( (VAL >> 24) & 255 )) \
$(( (VAL >> 16) & 255 )) \
$(( (VAL >> 8 ) & 255 )) \
$(( (VAL) & 255 ))
}
}
mapfile IPS < <(printsubnet $SUBNET)
for row in "${IPS[@]}";do
ping -c 1 "$row" >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
echo "$row is up"
else
echo "$row is down"
fi
done