Browse Source

Implement CIDR support using nmap -sP

Yann Weber 6 years ago
parent
commit
1fd4d4c834
1 changed files with 49 additions and 3 deletions
  1. 49
    3
      test.sh

+ 49
- 3
test.sh View File

3
 #HOSTS_FILES="/tmp/hosts"
3
 #HOSTS_FILES="/tmp/hosts"
4
 verbose=0
4
 verbose=0
5
 res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX)
5
 res_file=$(mktemp -t hosts_scanner.XXXXXXXXXX)
6
-pids=""
7
 date_cmd="date --rfc-3339=s"
6
 date_cmd="date --rfc-3339=s"
8
 
7
 
9
 lock="${res_file}.lock"
8
 lock="${res_file}.lock"
10
 
9
 
10
+pids=""
11
 clean_exit() {
11
 clean_exit() {
12
 	echo "Ctrl+C pressed, exiting..."
12
 	echo "Ctrl+C pressed, exiting..."
13
 	for pid in $(echo $pids)
13
 	for pid in $(echo $pids)
20
 	exit 0
20
 	exit 0
21
 }
21
 }
22
 
22
 
23
+cidr_pids=""
24
+clean_cidr() {
25
+	echo "CIDR killed, cleaning..."
26
+	for pid in $(echo $cidr_pids)
27
+	do
28
+		kill $pid
29
+		echo $pid killed
30
+	done
31
+	exit 0
32
+}
33
+
23
 semlock() {
34
 semlock() {
24
 	while [ 1 ]
35
 	while [ 1 ]
25
 	do
36
 	do
68
 	done
79
 	done
69
 }
80
 }
70
 
81
 
82
+cidr_scan() {
83
+	# cidr ping scan
84
+	# $1 cidr
85
+	# $2 result file
86
+	# $3 lock
87
+
88
+	trap clean_cidr 15
89
+	while [ 1 ]
90
+	do
91
+		for h in $(nmap -sP -oG - $1 | grep "Up$" | cut -d " " -f 2)
92
+		do
93
+			rehost=$(echo $h|sed 's/\./\\./g')
94
+			if grep -v " $rehost " $2 > /dev/null
95
+			then
96
+				printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
97
+				upd_ping $h $2 $3 &
98
+				pid=$!
99
+				cidr_pids="${cidr_pids}\n$pid"
100
+			fi
101
+		done
102
+	done
103
+}
104
+
105
+# prepopulate file
71
 for h in $(cat "$HOSTS_FILES")
106
 for h in $(cat "$HOSTS_FILES")
72
 do
107
 do
73
-	printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
108
+	if echo $h |grep -v '/' > /dev/null
109
+	then
110
+		printf "%30s %8s %30s\n" $h "unknw" "unknwn" >> $res_file
111
+	fi
74
 done
112
 done
75
 
113
 
114
+# run scanners
76
 for h in $(cat "$HOSTS_FILES" )
115
 for h in $(cat "$HOSTS_FILES" )
77
 do
116
 do
78
-	upd_ping $h $res_file $lock &
117
+	if echo $h |grep -v '/' > /dev/null
118
+	then
119
+		upd_ping $h $res_file $lock &
120
+	else
121
+		# cidr scan
122
+		cidr_scan $h $res_file $lock &
123
+	fi
79
 	pid=$!
124
 	pid=$!
80
 	pids="${pids}\n$pid"
125
 	pids="${pids}\n$pid"
81
 	echo "$h updated by $pid" >&2
126
 	echo "$h updated by $pid" >&2
84
 
129
 
85
 while [ 1 ]
130
 while [ 1 ]
86
 do
131
 do
132
+
87
 	semlock $lock
133
 	semlock $lock
88
 	clear
134
 	clear
89
 	echo "Ping radar $($date_cmd)\n"
135
 	echo "Ping radar $($date_cmd)\n"

Loading…
Cancel
Save