Implement CIDR support using nmap -sP

This commit is contained in:
Yann Weber 2018-01-02 14:43:50 +01:00
commit 1fd4d4c834

52
test.sh
View file

@ -3,11 +3,11 @@ HOSTS_FILES="$HOME/.hosts_scanner"
#HOSTS_FILES="/tmp/hosts" #HOSTS_FILES="/tmp/hosts"
verbose=0 verbose=0
res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX) res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX)
pids=""
date_cmd="date --rfc-3339=s" date_cmd="date --rfc-3339=s"
lock="${res_file}.lock" lock="${res_file}.lock"
pids=""
clean_exit() { clean_exit() {
echo "Ctrl+C pressed, exiting..." echo "Ctrl+C pressed, exiting..."
for pid in $(echo $pids) for pid in $(echo $pids)
@ -20,6 +20,17 @@ clean_exit() {
exit 0 exit 0
} }
cidr_pids=""
clean_cidr() {
echo "CIDR killed, cleaning..."
for pid in $(echo $cidr_pids)
do
kill $pid
echo $pid killed
done
exit 0
}
semlock() { semlock() {
while [ 1 ] while [ 1 ]
do do
@ -68,14 +79,48 @@ upd_ping() {
done done
} }
cidr_scan() {
# cidr ping scan
# $1 cidr
# $2 result file
# $3 lock
trap clean_cidr 15
while [ 1 ]
do
for h in $(nmap -sP -oG - $1 | grep "Up$" | cut -d " " -f 2)
do
rehost=$(echo $h|sed 's/\./\\./g')
if grep -v " $rehost " $2 > /dev/null
then
printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
upd_ping $h $2 $3 &
pid=$!
cidr_pids="${cidr_pids}\n$pid"
fi
done
done
}
# prepopulate file
for h in $(cat "$HOSTS_FILES") for h in $(cat "$HOSTS_FILES")
do do
printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file if echo $h |grep -v '/' > /dev/null
then
printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
fi
done done
# run scanners
for h in $(cat "$HOSTS_FILES" ) for h in $(cat "$HOSTS_FILES" )
do do
upd_ping $h $res_file $lock & if echo $h |grep -v '/' > /dev/null
then
upd_ping $h $res_file $lock &
else
# cidr scan
cidr_scan $h $res_file $lock &
fi
pid=$! pid=$!
pids="${pids}\n$pid" pids="${pids}\n$pid"
echo "$h updated by $pid" >&2 echo "$h updated by $pid" >&2
@ -84,6 +129,7 @@ sleep 1
while [ 1 ] while [ 1 ]
do do
semlock $lock semlock $lock
clear clear
echo "Ping radar $($date_cmd)\n" echo "Ping radar $($date_cmd)\n"