2014-03-05 3 views
5

Ich brauche eine schnelle und effiziente Möglichkeit, einen IP-Bereich für Port 80 zu öffnen.Scannen eines gesamten IP-Bereichs/Subnetzes für Port 80 offen?

Wenn ich zum Beispiel den OVH IP-Bereich "46.105.0.0/16" scannen möchte, muss ich jede IP in diesem Bereich scannen und eine Liste aller ip mit Port 80 open ausgeben.

46.105.0.51 
46.105.0.72 
46.105.0.91 
46.105.0.7 
46.105.0.15 

Ich muss mehrere Subnetze scannen und ich muss es in eine Datei ausgeben.

Edit: Ich habe auch CentOS auf meiner dedizierten Box mit einem 1Gbit Uplink.

Antwort

3

nmap to the rescue!:

nmap -Pn -p80 --open 46.105.0.0/16 

... finden Sie eine Liste von Hosts auf tcp/80 und entsprechenden nmap Ausgang reagiert erhalten;

  • -Pn: überspringt den Ping-Test, da man nur über einen offenen Port
  • --open Pflege: gibt nur die IP-Adressen für die Ihr Port offen
  • ist

Mit etwas awk ing (und grep weil ich bin faul und nicht so toll bei awk - könnte ein awk Master das für mich reparieren?), können Sie nur die Liste der IPs erhalten:

nmap -Pn -p80 --open 46.105.0.0/16 | grep 46.105 | awk '{print $5}NF == 6{print $6}' 

nmap hat auch Optionen für in bestimmten Formaten zu Dateien ausgibt, oder Sie können nur > in eine Datei:

nmap -Pn -p80 --open 46.105.0.0/16 | grep 46.105 | awk '{print $5}NF == 6{print $6}' > output.txt 
+0

Ich bekomme Fehler mit Ihren Befehlen. Ungültiges Argument für -P, verwenden Sie -P0, -PI, -PB, -PE, -PM, -PP, -PA, -PU, -PT oder -PT80 (oder die von Ihnen gewünschte Nummer für die TCP-Sonde) Zielport) ENDE! Ich brauche es auch in eine TXT-Datei ausgegeben werden. – user3385815

+0

Ok, ersetzen "-Pn" durch "-P0". Die Ausgabe in eine Datei sollte so einfach wie das Hinzufügen von '> output.txt' zum Ende des Befehls sein. – admdrew

+2

Versuchen Sie 'nmap -P0 -p80 --open 46.105.0.0/16 | grep 46.105 | awk '{print $ 5} NF == 6 {print $ 6}'> output.txt' – admdrew

1

Für alle, diesen Beitrag zu lesen, die keinen Zugang zu nmap haben, geschieht, ist hier ein schneller und rudimentär Art der Suche nach Port 80 im Netzwerk. Das einzige, was von diesem Skript benötigt wird, ist ipcalc, welches höchstwahrscheinlich verfügbar ist.

#!/bin/bash 
# easier to end the script if signal is caught 
trap exit 1 2 3 4 5 6 7 8 
# define a function that emulate netcat by opening a port to an ip via file descriptor 
netcat() { 
     exec 20<>/dev/tcp/${1}/${2} 
} 

# using ipcalc, get the nwtork address and the broadcast address and make both $NETWORK and $BROADCAST available to the script 
export $(ipcalc -b -n $1) 

# Convert the NETWORK and BROADCAST from dotted notation to hex 
printf -v startHexIP "%0.2x%0.2x%0.2x%0.2x" $(tr '\.' ' ' <<< $NETWORK) 
printf -v endHexIP "%0.2x%0.2x%0.2x%0.2x" $(tr '\.' ' ' <<< $BROADCAST) 

# computations are done in decimal so we need decimal representation of the BROADCAST address to control the list of IP addresses 
printf -v endDecIP "%d" 0x${endHexIP} 

# legitimate IP addresses start from NETWORK ADDRESS + 1 and end at BROADCAST ADDRESS - 1 
for((i=$((0x$startHexIP + 1)); i<$endDecIP; i++)); do 
     # $i is in decimal. we need to convert to hex 
     printf -v hexI "%8.8x" $i 
     # convert hex to dotted notation. 
     printf -v ip "%d.%d.%d.%d" 0x${hexI:0:2} 0x${hexI:2:2} 0x${hexI:4:2} 0x${hexI:6:2} 
     if (netcat $ip 80 > /dev/null 2>&1); then 
       echo $ip 
     fi 
done 

Das Skript kann nur ein Argument übergeben werden ausgeführt, <network>/<prefix>.

Beispiel.

./script 192.168.1.5/23