2010-09-24 45 views
1

Éditer: Répondu sur serverfault. Merci!Logiciel pour générer de fausses requêtes ARP?

Un produit que je teste semble flipper lorsqu'il reçoit une requête ARP avec une adresse IP d'expéditeur de 0.0.0.0. Ce n'est pas une sonde ARP, car la demande est adressée à mon module, et le système du client envoie la requête juste avant de commencer à utiliser sa propre adresse IP valide, qui est différente de l'adresse IP de mon module. Le problème est de recréer cela ici dans le laboratoire plutôt que d'avoir à se rendre sur le site du client.

Existe-t-il un logiciel que je peux utiliser pour générer une requête ARP à partir d'une fausse adresse? Ceci est similaire à, mais pas tout à fait la même chose que, l'usurpation ARP, puisque j'essaie de simuler la demande et non la réponse. L'un des outils d'usurpation d'identité at-il cette fonctionnalité? Ou existe-t-il un moyen de forcer Windows ou Linux à envoyer une sonde ARP?

+0

Si possible, pourriez-vous expliquer comment il est possible d'envoyer une requête arp avant d'obtenir une adresse IP de votre dhcp? J'ai toujours pensé que le dhcp découvrir/offrir/demander/ack chose DOIT venir à la première place. – InsertNickHere

+0

Ceci est une question de type serverfault et non stackoverflow. –

+0

@insertnickhere, le système du client est un système embarqué qui exécute sa propre pile Ethernet, ce qui lui permet de sortir les octets qu'il veut quand il veut et il semble qu'il commence à communiquer avant de s'initialiser complètement. Oui, c'est bizarre, mais si je peux changer mon module pour travailler avec cette situation, tout le monde sera heureux plus tôt que si j'essaye d'amener le client à changer de pile. @rahim, merci, je vais demander là aussi. –

Répondre

1

Vous pouvez utiliser Python2 pour faire ce travail. C'est vraiment une tâche assez simple. Vous aurez besoin de privilèges root pour ouvrir les sockets RAW et quelques connaissances avec Python.

import socket 
import struct 

#Packet structure explanation: 
#destmac = 0xff,0xff,0xff,0xff,0xff,0xff 
#sourcemac = 0x00,0x11,0x22,0x33,0x44,0x55 
#etherflags = 0x0806,0x0001,0x0800 
#arpflags = 0x6,0x4,0x0001 
#sourcemac = 0x00,0x11,0x22,0x33,0x44,0x55 
#sourceip = 0xc0,0xa8,0x2b,0x7a 
#targmac = 0x00,0x00,0x00,0x00,0x00,0x00 
#targip = 0xc0,0xa8,0x2b,0x0c 

packet = struct.pack('!12B3H2BH10B10B', 0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0x11,0x22,0x33,0x44,0x55, 0x0806,0x0001,0x0800, 0x6,0x4,0x0001 ,0x00,0x11,0x22,0x33,0x44,0x55, 0xc0,0xa8,0x2b,0x7a, 0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0xa8,0x2b,0x0c) 

sock = socket.socket(socket.PF_PACKET, socket.SOCK_RAW) 
sock.bind(('eth0', 6)) # 6 its protocol number 
sock.send(packet) 
sock.close()