nmap IPアドレスからのみ値を返し、Bashのループに渡します。

nmap IPアドレスからのみ値を返し、Bashのループに渡します。

ネットワーク上でアクティブな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の答えは実装する方が短いです。

しかし、Unixのように、すべての問題には多くの解決策があります

関連情報