Implement CIDR support using nmap -sP
This commit is contained in:
parent
b30f1f1e5e
commit
1fd4d4c834
1 changed files with 49 additions and 3 deletions
52
test.sh
52
test.sh
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue