Demande d'aide RAW socket win

bobosss972 Messages postés 10 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 30 mars 2013 - 4 juin 2012 à 11:42
bobosss972 Messages postés 10 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 30 mars 2013 - 5 juin 2012 à 02:18
salut a vous j'ai commencé un programme en console en utilisant les socket raw sous sp1 .

voila mon code
Code :
Sélectionner tout - Visualiser dans une fenêtre à part



#include <stdio.h>			 
#include <stdlib.h>			 
#include <string.h>	
#include <winsock2.h>			
#include <ws2tcpip.h>
 
#pragma comment(lib, "ws2_32.lib")       
 
typedef struct IPHEADER IPHEADER;
struct IPHEADER
{
unsigned char LongVers, version;
unsigned char  typServ;
unsigned short int tot_len;
unsigned short int id;
unsigned short int offset ; 
unsigned char flags ;
unsigned char  ttl;
unsigned char  protocol;
unsigned short int somme;
unsigned long  int ip_source;
unsigned long  int ip_dest;
};
 
typedef struct enteteICMP enteteICMP;
struct enteteICMP
{
unsigned char TypeMsg;
unsigned char CodeMsg;
unsigned short int Sommecontrole;
unsigned long int idMsg;
unsigned short int Numseq;
};
 
 
WSADATA WSAData; 
SOCKET monsock;
SOCKADDR_IN sock;
BOOL sockopt = TRUE; 
IPHEADER ip;
enteteICMP icmp;
 
unsigned short checksum(void * lpData, size_t size);
 
int main()
{
char * buffer= NULL;
char envoi[]="salut";
 
if(WSAStartup(MAKEWORD(2,0), &WSAData) != 0 )
{
   printf("\n WSAstartup a echoué \n");
   //return -1;
}
 
monsock = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
if(monsock == INVALID_SOCKET )
{
printf("\n Erreur de creation de la socket ! \n ");
//return -1;
}
 
 
if( setsockopt(monsock , IPPROTO_IP , IP_HDRINCL,(char *)&sockopt, sizeof(sockopt)) == SOCKET_ERROR )
{
printf(" \n erreur detectE pour mise en place de l'option sur la socket \n ");
return -1;
} 
 
buffer = malloc(sizeof(struct IPHEADER)+sizeof(struct enteteICMP)+1);
 
   ip.version    = 4;
       ip.LongVers   = 5;
       ip.typServ   = 0;
       ip.tot_len    = htons(sizeof(struct IPHEADER)+sizeof(struct enteteICMP));       //taille complete du packet
       ip.id         = htons(10);              
       ip.flags      = 0;
       ip.offset     = 0;                        
       ip.ttl        = 10;
       ip.protocol   = 1;                         
       ip.somme      = 0;                       
       ip.ip_source  = inet_addr("127.0.0.1");
       ip.ip_dest    = inet_addr("127.0.0.1");
   ip.somme = checksum(&ip, sizeof(ip));
 
   icmp.TypeMsg       = 8;         
       icmp.CodeMsg       = 0;	     
       icmp.Sommecontrole = 0;         
   icmp.idMsg         = 1;    
       icmp.Numseq        = 1;
   icmp.Sommecontrole = checksum(&icmp, sizeof(icmp));
 
   memcpy(buffer , &ip, sizeof(ip));
       memcpy(buffer + sizeof(ip), &icmp, sizeof(icmp));
   memcpy(buffer + sizeof(ip) + sizeof(icmp), envoi , strlen(envoi) );
 
 
   ZeroMemory(&sock, sizeof(sock));
 
   sock.sin_family        = AF_INET;
   sock.sin_addr.s_addr   = inet_addr("127.0.0.1");
       sock.sin_port          = htons(1);
 
   if( sendto(monsock,buffer, sizeof(buffer), 0, (SOCKADDR *)&sock, sizeof(sock)) == SOCKET_ERROR )
   {
printf("\n Erreur d'envoi \n");
return -1;
   }
   else
printf("bien envoyé !\n");
 
 
closesocket(monsock);
free(buffer);
WSACleanup();
 
return 0;
}
 
 
unsigned short checksum(void * lpData, size_t size)     
 {
    USHORT * t = lpData;
    DWORD somme = 0;
    size_t i, n = size / sizeof(USHORT);
 
    for(i = 0; i < n; i++)
        somme += t[i];
 
    if (size % 2)
    {
  		        UCHAR * u = lpData;
                        somme += u[size - 1];
                    }
 
                    while (HIWORD(somme))
                        somme = HIWORD(somme) + LOWORD(somme);
 
                  return LOWORD(~somme); 
                }



mais lors de l'execution j'ai 2 soucis :
- erreur de windows DAMAGE after normal block #46
- y'a rien qui est envoyé

voila j'ai lu pas mal de tutoriel de membre du forum mais je suis toujours bloqué. je suis ouvert a toutes pistes pouvant m'aidé a progressé merci

(projet multi logiciel de cmd ms dos de windows afin de decouvrir le reseau et les protocoles ) .

1 réponse

bobosss972 Messages postés 10 Date d'inscription mardi 6 juin 2006 Statut Membre Dernière intervention 30 mars 2013
5 juin 2012 à 02:18
sujet résolu :)
0
Rejoignez-nous