bobosss972
Messages postés10Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention30 mars 2013
-
4 juin 2012 à 11:42
bobosss972
Messages postés10Date d'inscriptionmardi 6 juin 2006StatutMembreDernière intervention30 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 ) .