Les Forums

Les Forums

Les forums sont fermés. Ils restent présent pour consultation et archivage.
Vous pouvez désormais poser vos questions directement dans les commentaires en bas de chaque page du site.
Alors n'hésitez pas à participer

Publication de l'outil ArpFlood.exe

Lu Rod,

Suite à ton [url=http://www.frameip.com/forum/viewtopic.php?t=513]post précedent[/url], tu trouveras cet outil qui va te permettre d'aller beaucoup plus vite sur l'emission de trame ARP.

Je t'ai rajouté une option permettant de tirer aléatoirement une adresse MAC source, je me suis dis que cela t'interesserais. Par contre, je ne sais pas pourquoi, mais dans ce cas, c'est hyper ralentit, certainement une limitation OS; Enfin, pas trop le temps de cherché, je t'ai fait ca en quick&dirty.

Pour aller le plus vite, spécifie une adresse mac source, un loops à 0 et supprime le view

Dis moi ce que tu en penses, et est ce que cela répond à ton besoin ?

[url=http://www.frameip.com/forum/publication-de-piece-jointe/arpflood_download.php]Download de ArpFlood.exe[/url]

Ci joint le code source :

// ********************************************
// Nom : ArpFlood.cpp
// Auteur : _sebf@frameIP.com.pas.de.spam
// Date de création : 02 Novembre 2006
// version : 1.0.3.10
// Licence : Cette executable est libre de toute utilisation.
// La seule condition existante est de faire référence
// au site http://www.frameip.com afin de respecter le travail d'autrui.
// ********************************************

// ********************************************************
// Les includes
// ********************************************************
// Il faut ajouter dans les proprités du projet => C++ => Command Line :
// /I "C:\RepPerso\Personnel\Developpement\Projets\LibrairieSocket"
// /I "C:\RepPerso\Personnel\Developpement\Projets\LibrairiePcap\Include"
#include "LibrairieSocket.h"
#include "pcap.h"

// ********************************************************
// Les Librairies
// ********************************************************
// Il faut ajouter dans les proprités du projet => Linker => Command Line :
// /LIBPATH:"C:\RepPerso\Personnel\Developpement\Projets\LibrairiePcap\Lib"
// /NODEFAULTLIB:libcd.lib
// /NODEFAULTLIB:LIBCMTD.lib
#pragma comment(lib,"Packet.lib")
#pragma comment(lib,"wpcap.lib")

// ********************************************************
// Les procédures
// ********************************************************
void initiation_des_variables(void);
void gestion_des_arguments(int argc, char* argv[]);
void Changement_aleatoire_des_valeurs(void);
void initiation_des_variables_automatiques(void);
void envoi_de_la_trame_winsock(void);
void envoi_de_la_trame_pcap(void);
void affichage_du_resultat(void);

// ********************************************************
// Les variables
// ********************************************************
struct mac entete_mac; // Entête Ethernet
char data_a_envoyer[65535]; // Data
unsigned int taille_de_data; // Longueur du char *, je n'utilise pas strlen car il peux y avoir des 0
unsigned char trame_a_envoyer[65535]; // data + entete ethernet
unsigned short taille_de_la_trame_a_envoyer=0; // Permet d'éviter un sizeof qui s'arrête au premier 0 trouvé

int nombre_de_caractere_emis; // Variable récupérant le nombre de caractères émis
unsigned long loops; // Compteur permettant de lancer x fois les trames
bool bouclage_infinie; // Variable permettant de définir le mode de boucle infinie (quand loops=0)
unsigned char numero_de_l_interface; // Numéro de l'interface qui sera utilisée
struct gestion_des_interfaces liste_des_interfaces; // structure possédant les informations des intefaces
struct adresse_mac adresse_mac_tampon; // Adresse MAC
bool mac_source_auto; // Variable permettant de savoir si l'adresse MAC source doit être prise à partir de l'interface
bool view; // Variable indiquant si on doit afficher les resultats

pcap_t *pointeur_interface; // Pointeur de l'interface
char buffer_d_erreur[PCAP_ERRBUF_SIZE];

int main (int argc, char* argv[])
{
initiation_des_variables();
gestion_des_arguments(argc,argv);
initiation_des_variables_automatiques();

// ********************************************************
// Accède à l'interface
// ********************************************************
if ((pointeur_interface=pcap_open_live(liste_des_interfaces.nom[numero_de_l_interface],65536,0,1000,buffer_d_erreur))==NULL)
gestion_des_erreurs(1,"pcap_open_live",1,1);

// ********************************************************
// Boucle d'envoi
// ********************************************************
while ( (loops!=0)||(bouclage_infinie==TRUE) )
{
// ********************************************************
// Décrémentation de la boucle
// ********************************************************
loops--;

// ********************************************************
// Changement aléatoire des champs
// ********************************************************
Changement_aleatoire_des_valeurs();

// ********************************************************
// Envoi de la trame
// ********************************************************
envoi_de_la_trame_pcap();

// ********************************************************
// Affichage du résultat
// ********************************************************
if (view==true)
affichage_du_resultat();
}

// ********************************************************
// Fermeture de l'accès à l'interface
// ********************************************************
pcap_close(pointeur_interface);

printf("\n\n");
return(1);
}

void initiation_des_variables(void)
{
unsigned i;

// ********************************************************
// Initiation diverse
// ********************************************************
srand(GetTickCount()); // Initialise le Random

// ********************************************************
// Affichage de la banniere
// ********************************************************
printf("\nArpFlood - Send ArpRequest with spoofing MAC Source - Version 1.0.3.10");
printf("\nCreate on November 02, 2006, Last compilation on November 02, 2006");
printf("\nCreated by sebastien point fontaine AT frameip.com specialy for Rod");
printf("\n");

// ********************************************************
// Initiation des arguments
// ********************************************************
loops=1;
bouclage_infinie=FALSE;
numero_de_l_interface=0;
liste_des_interfaces=recuperation_des_interfaces();
view=true;

// ********************************************************
// Options de l'entête MAC
// ********************************************************
adresse_mac_tampon=recuperation_de_l_adresse_mac(liste_des_interfaces.nom[numero_de_l_interface]);
for (i=0;i<6;i++)
{
entete_mac.source[i]=0;
entete_mac.destination[i]=255;
}
mac_source_auto=true;
entete_mac.type=htons(2054); // 08 00 indiquant un datagramme ARP

// ********************************************************
// Initialisation des data
// ********************************************************
char tampon[1000]="0001080006040001000000000002C0A86502000000000000C0A865FE";
memcpy( data_a_envoyer, conversion_hexa_string(tampon, strlen(tampon)), strlen(tampon));
taille_de_data=strlen(tampon)/2;
}

void gestion_des_arguments(int argc,char* argv[])
{
char *caractere_non_convertit;
int i,j;

// ********************************************************
// Affichage de l'aide
// ********************************************************
if ( (argc>1) && (strcmp(argv[1],"-?")==0) || (argc==1) )
{
printf("\n");
printf("\nGENERAL OPTIONS");
printf("\n-? This help");
printf("\n-loops Number of loops Default value: %d (0 to no stop)",loops);
printf("\n-view Show the answers Default value: %d",view);

printf("\n\nFREE INTERFACES");
for(i=0;i<(signed)liste_des_interfaces.nombre;i++)
printf("\n%d - %s",i,liste_des_interfaces.description[i]);
printf("\n-interface Interface choice Default: %d",numero_de_l_interface);

printf("\n\nETHERNET HEADER OPTIONS (-send_mode 1)");
printf("\n-mac_source (0 => Random MAC) Default: %.2X-%.2X-%.2X-%.2X-%.2X-%.2X", entete_mac.source[0], entete_mac.source[2], entete_mac.source[2], entete_mac.source[3], entete_mac.source[4], entete_mac.source[5]);
printf("\n-mac_destination @ Ethernet Default: %.2X-%.2X-%.2X-%.2X-%.2X-%.2X", entete_mac.destination[0], entete_mac.destination[2], entete_mac.destination[2], entete_mac.destination[3], entete_mac.destination[4], entete_mac.destination[5]);

printf("\n\nOPTIONS OF THE DATA LAYER");
printf("\n-data_ascii specify a string Default: %s",data_a_envoyer);
printf("\n-data_hexa specify some hexa Default: %s",conversion_string_hexa(data_a_envoyer,strlen(data_a_envoyer)));

printf("\n\nSAMPLE");
printf("\narpflood.exe -interface 2 -loops 0 -view 1");
printf("\n\n");
exit(0);
}

// ********************************************************
// Récupération des arguments
// ********************************************************
for (i=1;i<argc;i=i+1)
{
// ********************************************************
// Choix généraux
// ********************************************************
if ( (strcmp(strlwr(argv[i]),"-loops")==0) || (strcmp(strlwr(argv[i]),"/loops")==0) )
{
loops=(unsigned long)strtod(argv[i+1],&caractere_non_convertit);
if (loops==0)
bouclage_infinie=TRUE;
else
bouclage_infinie=FALSE;
}
if ( (strcmp(strlwr(argv[i]),"-view")==0) || (strcmp(strlwr(argv[i]),"/view")==0) )
view=(bool)strtod(argv[i+1],&caractere_non_convertit);

// ********************************************************
// Choix de l'interface
// ********************************************************
if ( (strcmp(strlwr(argv[i]),"-interface")==0) || (strcmp(strlwr(argv[i]),"/interface")==0) )
numero_de_l_interface=(unsigned char)strtod(argv[i+1],&caractere_non_convertit);

// ********************************************************
// Options de l'entête MAC
// ********************************************************
if ( (strcmp(strlwr(argv[i]),"-mac_source")==0) || (strcmp(strlwr(argv[i]),"/mac_source")==0) )
{
adresse_mac_tampon=transformation_string_en_mac(argv[i+1]);
for (j=0;j<6;j++)
entete_mac.source[j]=adresse_mac_tampon.adresse[j];
mac_source_auto=false;
}

if ( (strcmp(strlwr(argv[i]),"-mac_destination")==0) || (strcmp(strlwr(argv[i]),"/mac_destination")==0) )
{
adresse_mac_tampon=transformation_string_en_mac(argv[i+1]);
for (j=0;j<6;j++)
entete_mac.destination[j]=adresse_mac_tampon.adresse[j];
}

// ********************************************************
// Options de la couche DATA
// ********************************************************
if ( (stricmp(argv[i],"-data_ascii")==0) || (stricmp(argv[i],"/data_ascii")==0) )
{
strcpy(data_a_envoyer,argv[i+1]);
taille_de_data=strlen(argv[i+1]);
}
if ( (stricmp(argv[i],"-data_hexa")==0) || (stricmp(argv[i],"/data_hexa")==0) )
{
memcpy(data_a_envoyer,conversion_hexa_string(argv[i+1],strlen(argv[i+1])),strlen(argv[i+1]));
taille_de_data=strlen(argv[i+1])/2;
}
}
}


void Changement_aleatoire_des_valeurs()
{
unsigned int i;

// ********************************************************
// Tirage aléatoire de l'adresse MAC
// ********************************************************
if (mac_source_auto==true)
for (i=0;i<6;i++)
entete_mac.source[i]=(unsigned char)rand()%256;
}

void initiation_des_variables_automatiques(void)
{
unsigned int i;

adresse_mac_tampon=recuperation_de_l_adresse_mac(liste_des_interfaces.nom[numero_de_l_interface]);
for (i=0;i<6;i++)
entete_mac.source[i]=adresse_mac_tampon.adresse[i];
}

void envoi_de_la_trame_pcap(void)
{
// ********************************************************
// Préparation de la trame à envoyé
// ********************************************************
memcpy(trame_a_envoyer,(unsigned short *)&entete_mac,sizeof(struct mac));
memcpy(trame_a_envoyer+sizeof(struct mac),data_a_envoyer,taille_de_data);

// ********************************************************
// Envoi de la trame
// ********************************************************
taille_de_la_trame_a_envoyer=sizeof(struct mac)+(unsigned short)taille_de_data;
if(pcap_sendpacket(pointeur_interface,trame_a_envoyer,taille_de_la_trame_a_envoyer)!=0)
gestion_des_erreurs(1,"pcap_sendpacket",1,1);
}

void affichage_du_resultat()
{
// ********************************************************
// Affichage du resultat
// ********************************************************
printf("\nARP frame was sent from %.2X-%.2X-%.2X-%.2X-%.2X-%.2X",entete_mac.source[0],entete_mac.source[2],entete_mac.source[2],entete_mac.source[3],entete_mac.source[4],entete_mac.source[5]);
printf(" to %.2X-%.2X-%.2X-%.2X-%.2X-%.2X with %d Bytes",entete_mac.destination[0],entete_mac.destination[2],entete_mac.destination[2],entete_mac.destination[3],entete_mac.destination[4],entete_mac.destination[5],taille_de_la_trame_a_envoyer);
}


@+
_SebF - Sébastien FONTAINE
je teste ca demain matin dès que j'arrive au taf.

Seb, t'es vraiment trop bon.
Service express.

Si t'es sur Paris, je vais devoir te payer un resto un de ces 4.
ca marche du tonnerre !

avec le view = 1 je tourne à 17 000 - 18 000 trames ARP/s.
avec le view = 0 je tourne à 30 000 - 35 000 trames ARP/s.

tout ca sur un reseau 100Mbps.

Je vais maintenant pouvoir approfondir mes diagnostiques de stabilité de certains equipements.

UN ENORME MERCI à SEB pour ce developpement sur mesure.
🙂 Salut Seb,

STP, si tu peux me dire en gros qu'est ce qu'il fait le programme en C pour empoisoner le cache ARP.

Est il valable sous linux comme sous windows ?

Merci et bonne journée.
Au fait, je l'ai exécuté à partir de windows sur deux machines virtuelles Linux debian : les deux ont plantées.

Ce que je comprends, d'après la commande, que l'interface 2 par exemple envoie des trames a FFFFFFFFFFFF (Toutes les machines) avec comme adresse MAC source (une valeur aléatoire).

Pourquoi les machine Linux plantent ? Parce que leurs cache arp n'est pas stable: des valeur aléatoires.

Dans la trame envoyée par l'interface 2 c'est quoi l'adresse IP Source ?

corrige-moi

Merci seb
Salut Seb,
STP, si tu peux me desperate en gros qu'est ce qu'il fait le program en C pour empoisoner le store ARP.
Est il valable sous linux comme sous windows ?
Merci et bonne journée 🙂 🙂




_________________________________
Decrease your exam stress by using our latest [url=http://www.test-king.com/exams/CV0-001.htm]CV0-001 exam[/url] and best quality [url=http://www.test-king.com/exams/NS0-504.htm]Test-king.com[/url] and passguide. We provide with 100% pass guarantee along with [url=http://www.fcc.edu/]fcc[/url] and [url=http://www.pittstate.edu/]www.pittstate.edu[/url]