Ich möchte nur die nicht verwendete IP-Adresse in einem Netzwerk herausfinden. Ich denke, dass es mit nmap möglich ist. Kann mir jemand den Weg pls sagen?
Hinweis:
Ich brauche nur die kostenlose IP-Liste.
Ich möchte nur die nicht verwendete IP-Adresse in einem Netzwerk herausfinden. Ich denke, dass es mit nmap möglich ist. Kann mir jemand den Weg pls sagen?
Hinweis:
Ich brauche nur die kostenlose IP-Liste.
Antworten:
Ein schneller Scanner ist arp-scan, der ARP verwendet , um andere Computer in einem Netzwerk zu "sehen". Es gibt auch die MAC-Adresse zurück und versucht, den Hersteller des Netzwerkadapters zu ermitteln.
Anwendungsbeispiel ( bei Bedarf wlan0
durch ersetzen eth0
):
$ sudo arp-scan -I wlan0 192.168.1.0/24
Interface: wlan0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.6 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.1.10 00:90:f5:33:e2:f2 CLEVO CO.
192.168.1.254 00:14:7f:72:cd:05 Thomson Telecom Belgium
2 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.6: 256 hosts scanned in 1.406 seconds (182.08 hosts/sec). 2 responded
Beachten Sie, dass dieses Dienstprogramm nur eingeschaltete Computer meldet. ping
kann blockiert werden, arp-scan
kann aber nicht blockiert werden, da ein Computer mit anderen Computern in einem Netzwerk interagieren muss. Um sicherzustellen, dass eine IP nicht verwendet wird, sollten Sie Ihren Router (für statische / dynamische Adressen) und den DHCP-Server (für dynamische Adressen) überprüfen.
-i
Parameter zu erhöhen , z -i 5
. B. für 5 ms.
sudo nmap -sP -PR 192.168.0.*
(oder was auch immer Ihr Netzwerk ist) wird den Trick tun.
Zum Installieren verwenden Sie sudo apt-get install nmap
.
Quelle: serverfault.com .
Gerade getestet, funktioniert wie ein Zauber, einschließlich verdeckter Hosts. Sie müssen sudo hinzufügen, um die -PR
Option nutzen zu können .
sudo
). Darüber hinaus wird es wahrscheinlich von der Firewall blockiert, da auch die Ports des Hosts durchsucht werden, wodurch auch die Suche verlangsamt wird.
Ich finde fping nützlich; Unter anderem wird ein Bereich von Adressen und Listen gepingt, die "lebendig" und "nicht erreichbar" sind. fping ist nicht standardmäßig installiert.
sudo apt-get install fping
Der einfache Ansatz besteht darin, es nur über einen Adressbereich auszuführen.
fping -g 192.168.0.2 192.168.0.254 2>/dev/null
Etwas aufwändiger, um eine Liste nicht verwendeter IPs zu erstellen.
fping -g 192.168.0.2 192.168.0.254 2>/dev/null | grep 'is unreachable' | cut -d ' ' -f 1 | sort -t '.' -k 4 -n
Ich glaube, es ist nicht die beste Lösung, aber es macht, was Sie wollen. Dieses Skript wird ping
über das 192.168.0.0/24
Netzwerk ausgeführt und gibt eine Liste inaktiver IP-Adressen zurück, wenn sich keine im ARP-Cache befinden.
Vorteile gegenüber bisherigen Lösungen:
root
Benutzer ausgeführt werdenUm Ihr Netzwerk zu scannen, führen Sie es mit <first IP> <last IP>
Parametern aus.
#!/usr/bin/env python
from threading import Thread
import subprocess
from Queue import Queue
verbose = False
num_threads = 8
queue = Queue()
inactive_ips = [0 for i in range(256)]
lines = open("/proc/net/arp", "r").readlines()
arp_cache = [l.split()[0] for l in lines[1:] if l.split()[2] == "0x2"]
def ip_str_to_int(ip):
ip = ip.rstrip().split('.')
ipn = 0
while ip:
ipn = (ipn << 8) + int(ip.pop(0))
return ipn
def ip_int_to_str(ip):
ips = ''
for i in range(4):
ip, n = divmod(ip, 256)
ips = str(n) + '.' + ips
return ips[:-1] ## take out extra point
#wraps system ping command
def pinger(i, q):
while True:
ip_num = q.get()
ip = ip_int_to_str(ip_num)
if ip not in arp_cache:
ret = subprocess.call("ping -c 1 %s" % ip,
shell=True,
stdout=open('/dev/null', 'w'),
stderr=subprocess.STDOUT)
if ret != 0:
inactive_ips[ip_num % 256] = ip
q.task_done()
if __name__ == '__main__':
from optparse import OptionParser
usage = "usage: %prog [options] [first IP] [last IP]"
parser = OptionParser(usage=usage)
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="make lots of noise")
parser.add_option("-q", action="store_false", dest="verbose", help="print only IP adresses")
(options, args) = parser.parse_args()
verbose = options.verbose
first = ip_str_to_int(args[0] if len(args) > 0 else "192.168.0.1")
last = ip_str_to_int(args[1] if len(args) > 1 else "192.168.0.254")
if verbose:
print "Scanning inactive network addresses from %s to %s" % (
ip_int_to_str(first),
ip_int_to_str(last))
for i in range(num_threads):
worker = Thread(target=pinger, args=(i, queue))
worker.setDaemon(True)
worker.start()
for ip in range(first, last + 1):
queue.put(ip)
queue.join()
for ip in inactive_ips:
if ip:
print ip
Update nach Downvote
Ich habe es geschrieben, weil nmap -PR 192.168.0.*
es bei mir nicht funktioniert hat:
Starting Nmap 5.21 ( http://nmap.org ) at 2011-10-06 15:34 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 0.03 seconds
Update 2
Alle Probleme mit dem ARP-Cache wurden behoben.
Dies sollte es richtig machen in bash:
#!/bin/bash
#setting language variables for subshell making sure we grep for the right word
LC_ALL=C
LANG=C
# retrieve IP from user input
read -p "Input your network (example: 192.168.0): " my_net
for i in $(seq 1 254);
do
ip="$my_net.$i"
check="$(ping -c1 "$ip")"
if [ "$(grep "Unreachable" <<<"$check")" != "" ]
then
echo "$ip is unreachable"
fi
done
Ich denke, es ist einfacher
# my_net define my Net_ID
my_net=192.168.1.
for i in `seq 1 254`;
do
ip="$my_net$i"
ping -c2 $ip | grep "is unreachable" | cut -d" " -f1 &
done
"is unreachable"
oder wenn Sie leben, ändern Sie es, um grep -v time
vielleicht gut für Sie zu arbeiten