Utilizando Wireshark es posible obtener todos los paquetes que tienen la dirección MAC determinada mediante el filtro eth.src==MACADDR. Si el host que posee la MAC envió tráfico IP podremos determinar la dirección IP inspeccionando los paquetes filtrados.
También es posible consultar la caché ARP para ver si existe una entrada con la dirección MAC.
Si se utiliza DHCP dentro del segmento y tenemos acceso al servidor DHCP, es posible determinar la dirección IP consultando la asignación de leases.
Pero si no hay una entrada con la dirección MAC correspondiente dentro de la caché ARP y no tenemos acceso al servidor DHCP, podemos realizar fuerza bruta sobre todas las direcciones IP dentro del segmento de red para encontrar la IP buscada.
El siguiente script bash busca la dirección IP correpondiente con una dirección MAC utilizando fuerza bruta sobre el rango de direcciones IP especificado. Básicamente lo que hace es un pedido ARP para cada IP del rango, si la MAC obtenida coincide con la MAC suministrada hemos encontrado la dirección IP correspondiente. El pedido de ARP se puede hacer de varias formas. Por ejemplo, es posible forzarlo enviando un paquete de una capa superior, como un ICMP echo request, y luego consultar la caché ARP y buscar la MAC deseada para obtener la IP correspondiente. También es posible utilizar directamente la herramienta arping utilizando cada dirección IP como parámetro.
#!/bin/bash
START_IP=192.168.0.1
END_IP=192.168.0.254
if [ $# -lt 2 ]
then
echo "usage: $0 <mac-addr> <start-ip> <end-ip>"
exit -1
fi
MAC_ADDR=$1
START_IP=$2
END_IP=$3
IP=(${START_IP//./ })
IP_FIN=(${END_IP//./ })
timestamp=$( date +"%s" )
echo -n "Scan progress"
for (( A=${IP[0]}; A<=${IP_FIN[0]}; A++ ))
do
for (( B=${IP[1]}; B<=${IP_FIN[1]}; B++ ))
do
for (( C=${IP[2]}; C<=${IP_FIN[2]}; C++ ))
do
for (( D=( ${IP[3]} ); D<=${IP_FIN[3]}; D++ ))
do
IP_ADDR="$A.$B.$C.$D"
echo -n "."
#ARPING_OUT=$( arping -c 1 $IP_ADDR 2> /dev/null )
ping -c 1 $IP_ADDR &> /dev/null
ARP_OUT=$( arp -n | grep -i $MAC_ADDR )
#if [[ "$ARPING_OUT" =~ $MAC_ADDR ]]
if [[ "$ARP_OUT" =~ $MAC_ADDR ]]
then
echo ""
echo $ARP_OUT
IP_FIN[0]=$A
IP_FIN[1]=$B
IP_FIN[2]=$C
IP_FIN[3]=$D
fi
done
done
done
done
endtimestamp=$( date +"%s" )
scantime=$(( endtimestamp - timestamp ))
echo ""
echo "Done ($scantime seconds)"
Ahora veamos el script en acción:
1 comentarios:
gracias......es lo único que me soluciono el problema
Publicar un comentario