네트워크에서 활성 IP 장치만 검색하는 nmap 스크립트가 있습니다.
nmap -sP 192.168.1.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
여러 결과가 nmap에서 반환 값을 갖지 않을 수 있다는 것을 알고 있기 때문에 루프에서 다음 명령을 실행하기 위해 nmap에서 결과 IP 주소를 가져오고 싶습니다.
echo "# This script checks if a remote device is alive"
read va * This is suppose to receive the IP address one by one
echo "Checking Device "$va
if [ $(nc -z "$va" 22; echo $?) -eq 0 ]; then
echo $va" is Online !"
else
echo "Cannot proceed with remote connection device "$va" is Offline !"
fi
답변1
nmap을 사용하여 열려 있는 TCP 포트 22를 확인할 수도 있습니다.
nmap -p 22 192.168.1.0/24 -oG - | grep -oP "Host: \K[^ ]+(?=.* 22/open/tcp.*)"
답변2
unix.stackexchange에 오신 것을 환영합니다!
xargs
당신의 친구인가요?
하지만 먼저 스크립트를 일부 변경하세요.
$ cat test.sh
#!/bin/bash
echo "# This script checks if a remote device is alive"
va=$1 # passing it as an argument is the right thing to do here
echo "Checking Device "$va
if [ $(nc -z "$va" 22; echo $?) -eq 0 ]; then
echo $va" is Online !"
else
echo "Cannot proceed with remote connection device "$va" is Offline !"
fi
이제 xargs
마법이 적용됩니다( %
모든 호출에서 각 주소로 대체됨).
$ nmap -sP 172.20.10.1-2 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}' |xargs -I % bash test.sh %
# This script checks if a remote device is alive
Checking Device 172.20.10.1
Cannot proceed with remote connection device 172.20.10.1 is Offline !
# This script checks if a remote device is alive
Checking Device 172.20.10.2
Connection to 172.20.10.2 port 22 [tcp/ssh] succeeded!
172.20.10.2 is Online !
다음에 일어날 일을 실험하기 bash test.sh %
위해 대체할 수도 있습니다 .echo ">>>%<<<"
그러나 Ipor Sircer의 답변은 구현하기가 더 짧습니다.
하지만 유닉스처럼 모든 문제에는 많은 해결책이 있습니다