1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
#include "socket.h"
#define PACKET_SIZE 1024
//variable globale
SOCKET socketRaw; // Numéro de la socket obtenu
char buffer[PACKET_SIZE];
// The WSAStartup function initiates use of WS2_32.DLL by a process.
bool initWSA()
{
bool tempo = true;
WSAData wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
tempo = false;
}
return tempo;
}
// The WSACleanup function terminates use of the WS2_32.DLL.
void clearWSA()
{
WSACleanup();
}
/// <summary>
/// Fonction permettant de créer la socket qui me permetra d'envoyer mes données.
/// Paramètre d'entrée : aucun
/// Paramètre de sortie : un booléen (vrai ou faux) m'indiquant que la création s'est bien (ou pas) réalisée
/// </summary>
bool creat_Socket()
{
bool tempo = true;
int result;
socketRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, 0);
if(socketRaw == INVALID_SOCKET)
{
tempo = false;
}
return tempo;
}
/// <summary>
/// Fonction permettant d'initialiser la socket qui me permetra d'envoyer mes données.
/// Paramètre d'entrée : aucun
/// Paramètre de sortie : un booléen (vrai ou faux) m'indiquant que l'initialisation s'est bien (ou pas) réalisée
/// </summary>
bool init_socket()
{
bool tempo = true;
int sockOpt = 1;
int result;
// IPPROTO_IP IP_HDRINCL ==> Indique que l'IP header doit etre fourni par des données externes
if((result = setsockopt(socketRaw, IPPROTO_IP, IP_HDRINCL, (char*)&sockOpt, sizeof(sockOpt))) == SOCKET_ERROR)
{
tempo = false;
}
return tempo;
}
/// <summary>
/// Fonction réalisant l'envoi des données au travers d'une socket
/// Attend une structure sockaddr-in en entrée
/// Retourne un booléen suivant le bon fonctionnement ou pas de la fonction.
/// </summary>
bool envoi_Socket(struct sockaddr_in IP_sock_info, int paquetSize, char * paquet)
{
bool tempo = false;
int result;
result = sendto(socketRaw, paquet, sizeof(paquet), 0, (struct sockaddr *)&IP_sock_info, sizeof(IP_sock_info));
if(result != SOCKET_ERROR)
{
tempo = true;
}
return tempo;
} |
Partager