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
|
#ifdef WIN32
#include <winsock.h>
#else
#include <netinet/in.h>
#define closesocket close
#endif
#include <stdio.h>
#include <stdlib.h>
/* Sous windows, a compiler avec ws2_32.lib */
#define TAILLE 10
#define TAILLE_MD5 16
int main(int argc , char ** argv)
{
int clientSocket;
struct sockaddr_in adresse_serveur;
char taille[TAILLE+1];
int l_taille, l, result;
unsigned char MD5_result[TAILLE_MD5];
/* Pas de bol, il faut initialiser ws2_32.dll */
#ifdef _WIN32
WORD wVersionRequested=MAKEWORD(2,0);
WSADATA wsaData;
if (WSAStartup(wVersionRequested,&wsaData)) return(-1);
if ((LOBYTE(wsaData.wVersion)!=2)||(HIBYTE(wsaData.wVersion)!=0))
{
WSACleanup();
return(EXIT_FAILURE);
}
#endif
if ( argc != 4 )
{
printf("Usage MD5Serv IP_Serveur port \"Chaine dont on veut le MD5\"\n");
exit(EXIT_FAILURE);
}
l = strlen(argv[3]);
l_taille = sprintf(taille, "%u", l);
*(taille+l_taille) = '\0';
adresse_serveur.sin_family = AF_INET;
adresse_serveur.sin_addr.s_addr = inet_addr(argv[1]);
adresse_serveur.sin_port = (unsigned short int)htons((unsigned short int)(atoi(argv[2])));
clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if ( clientSocket < 0 )
exit(EXIT_FAILURE);
if ( result = connect(clientSocket,(struct sockaddr*)&adresse_serveur,sizeof(adresse_serveur)) == 0 )
{
result = send(clientSocket,(char *)(taille), TAILLE,0);
if ( result == TAILLE )
{
result = send(clientSocket,(char *)(argv[3]), l,0);
if ( result == l )
{
result = recv(clientSocket,(char *)(MD5_result), TAILLE_MD5,0);
if ( result == TAILLE_MD5 )
{
for (l = 0; l < TAILLE_MD5; printf ("%02x", MD5_result[l++]));
printf("\n");
}
}
}
}
closesocket(clientSocket);
exit(EXIT_SUCCESS);
} |
Partager