PDA

Ver la versión completa : Shellscript parametros de un archivo a comandos



Cypress
03-12-2009, 14:33
Buenas.. estoy intentnado hacer lo siguiente,

Tengo un archivo donde tengo 63 nombres de hosts, quiero levantar un pedido al administrador del DHCP, que me reserve las direcciones IP de estos 63 hosts, a travez de su mac address.

lo que tengo pensado hacer es lo siguiente script:



for ((i=1;i<63;i++)); do
arp $(head -n $i host.txt |tail -n 1) | awk '/Cyp/ {$1 $3}' > host_mac.txt

done;


Les pongo una salida y los intentos que hice:



Cypuysrv456:~# head -n 1 host.txt |tail -n 1
CypUYNB106


Cypuysrv456:~# ping $(head -n 1 host.txt |tail -n 1)
ping: unknown host CypUYNB106


Cypuysrv456:~# ping CypUYNB106
PING CypUYNB106.hh.Cyp.com (172.Z.X.Y) 56(84) bytes of data.
64 bytes from Cypuynb106.hh.Cyp.com (172.Z.X.Y): icmp_seq=1 ttl=128 time=0.333 ms
64 bytes from Cypuynb074.hh.Cyp.com (172.Z.X.Y): icmp_seq=2 ttl=128 time=0.276 ms
^C
--- CypUYNB106.hh.Cyp.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.276/0.304/0.333/0.033 ms


Cypuysrv456:~#


Se los comento más o menos:



Cypuysrv456:~# head -n 1 host.txt |tail -n 1
CypUYNB106

Voy tomando de a un los nombres del host, el sistema devuelve esa salida.




Cypuysrv456:~# ping $(head -n 1 host.txt |tail -n 1)
ping: unknown host CypUYNB106


Maldición! no reconoce el host, tal vez no puede resolver el nombre.



Cypuysrv456:~# ping CypUYNB106
PING CypUYNB106.hh.Cyp.com (172.Z.X.Y) 56(84) bytes of data.
64 bytes from Cypuynb106.hh.Cyp.com (172.Z.X.Y): icmp_seq=1 ttl=128 time=0.333 ms
64 bytes from Cypuynb074.hh.Cyp.com (172.Z.X.Y): icmp_seq=2 ttl=128 time=0.276 ms
^C
--- CypUYNB106.hh.Cyp.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.276/0.304/0.333/0.033 ms


:eek:lo pudo resolver!

¿ por qué antes no ?

Minetras escribia esto, decidi cambiando por el nombre completo del host:

CypUYNB106.hh.Cyp.com

Ya que hace unos días logre unir al dominio ( active directory ) este server gnu/linux.

¿ Alguna idea de por qué no reconoce este nombre y lo resuelve ?



# cat /etc/resolv.conf
domain hh.Cyp.com
search hh.Cyp.com
nameserver 172.Z.X.F
nameserver 172.Z.W.R


Saludos,

Cypress
07-12-2009, 20:37
for ((i=1;i<10;i++)) ; do echo $(head -n $i hosts.txt | tail -1| nawk '{print $2}') | xargs -n 1 arp; done



de esa forma anduvo.. pero no muy bien, y no pude conseguir todas las macs que queria :(

En fin.. les paso la solucion.
Saludos!

j8k6f4v9j
09-12-2009, 00:42
for ((i=1;i<10;i++)) ; do echo $(head -n $i hosts.txt | tail -1| nawk '{print $2}') | xargs -n 1 arp; done


Una forma de reducir el script creo que podría ser:



while read -r h; do
arp $(echo $h | awk {'print $2'})
done < hosts.txt


Pero en ese caso `arp $HOST` sólo te mostraría las entradas que ya hay en la caché de ARP del sistema. El problema es que es probable que no estén en la caché algunas entradas conocidas por el sistema (hosts de /etc/hosts, etc).

Por ejemplo, suponiendo que el equipo tiene una interfaz de red configurada con la dirección IP 192.168.1.30. Al hacer algo como esto:



nmap -sP 192.168.1.0/24 2> /dev/null > /dev/null
arp | grep -v 'incomplete'


podrías obtener más información acerca de los equipos conocidos por el sistema.


Salu2

Cypress
10-12-2009, 21:01
Ah, pense que arp IP, generaba un paquete arp request.

Y luego lo ponia en el arp cache por un X tiempo.
--
El tema es que si hago un ping IP, como son tantas direcciones de IP, se borran de la tabla arp.

se puede generar un arp request por si solo?

Si no mal recuerdo los arp request, se hacen por brodcast, y si tengo un router en el medio, no podré obtener la ARP del host final :-/

pasa que las redes de acá, están mal hechas y tenemos dos redes:

172.X.Y.0/24
172.X.Z.0/24

Y por el medio hay un router, entonces no puedo acceder a las redes 172.X.Z.0/24 si estoy en la 172.X.Y.0/24 a travez de un paquete arp_request

De todas formas en este momento ya solucione el tema.. haciendo la clasica envio de mensajes a la lista de correo del trabajo.

Pero bueno.. la otra solución era más prolija.

Salud2

j8k6f4v9j
10-12-2009, 23:09
Hombre, desde una red de clase C no podrás obtener respuestas arp desde la otra. La caché de ARP se pobla con simples peticiones icmp ping, ya que éstas generan las peticiones arp necesarias.

Las peticiones ARP se pueden forjar. Por ejemplo, se suelen forjar este tipo de peticiones en ciertos ataques a redes inalámbricas. Una herramienta bastante conocida es arpforge (http://wirelessdefence.org/Contents/Aircrack_arpforge.htm), que viene incluido en la suite de aircrack-ng.


Salu2



http://img359.imageshack.us/img359/6631/celliigy4.pngKeep on Rollin' :mad: