Solo quiero averiguar la dirección IP no utilizada en una red. Creo que es posible con nmap. ¿Alguien puede decirme la forma por favor?
Nota:
Solo necesito la lista de IP gratis solo.
Solo quiero averiguar la dirección IP no utilizada en una red. Creo que es posible con nmap. ¿Alguien puede decirme la forma por favor?
Nota:
Solo necesito la lista de IP gratis solo.
Respuestas:
Un escáner rápido es arp-scan que usa ARP para "ver" otras máquinas en una red. También devuelve la dirección MAC e intenta determinar el fabricante del adaptador de red.
Ejemplo de uso (reemplazar wlan0
por eth0
si es necesario):
$ 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
Tenga en cuenta que esta utilidad solo informa sobre máquinas que están encendidas. ping
se puede bloquear, pero arp-scan
no se puede bloquear, ya que es necesario que una máquina interactúe con otras máquinas en una red. Para asegurarse de que una IP no se use, es mejor que mire su enrutador (para direcciones estáticas / dinámicas) y el servidor DHCP (para direcciones dinámicas).
-i
parámetro, por ejemplo, -i 5
durante 5 ms.
sudo nmap -sP -PR 192.168.0.*
(o cualquiera que sea su red) hará el truco.
Para instalarlo use sudo apt-get install nmap
.
Fuente: serverfault.com .
Acabo de probar esto, funciona de maravilla, incluidos los hosts oscurecidos, debe agregar sudo para poder usar la -PR
opción.
sudo
). Además, probablemente esté bloqueado por el firewall, ya que también escanea los puertos del host, lo que también ralentiza la búsqueda.
Encuentro útil fping; entre otras cosas, hará ping a un rango de direcciones y enumerará cuáles están "vivas" y cuáles son "inalcanzables". fping no está instalado por defecto.
sudo apt-get install fping
El enfoque simple es simplemente ejecutarlo en un rango de direcciones.
fping -g 192.168.0.2 192.168.0.254 2>/dev/null
Un poco más elaborado, para producir una lista de IP no utilizadas.
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
Creo que no es la mejor solución, pero hace lo que quieres. Este script se ejecuta ping
en la 192.168.0.0/24
red y devuelve una lista de IP inactivas si no hay en la caché ARP.
Ventajas sobre soluciones anteriores:
root
usuarioPara escanear su red, ejecútela con <first IP> <last IP>
parámetros.
#!/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
Actualización después del voto negativo
Lo escribí porque nmap -PR 192.168.0.*
no funcionó para mí:
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
Actualización 2
Se corrigieron todos los problemas con ARP-cache.
Esto debería hacerlo bien en 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
creo que es más simple
# 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"
o si vive, cámbielo para grep -v time
que funcione bien para usted