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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#include <stdio.h>
#include <stdarg.h>
#include <winsock2.h>
#include <string.h>
#include <errno.h>
extern int errno;
struct pseudohdr
{
u_long saddr;
u_long daddr;
u_char zero;
u_long protocol;
u_long length;
};
struct tcphdr
{
unsigned short sport; /* port source */
unsigned short dport; /* port de destination */
unsigned int seqnum; /* numéro de séquence */
unsigned int acknum; /* accusé de réception */
unsigned char dataoffset:4; /* décalage des données (data offset) */
/* flags */
unsigned char reserved:6;
unsigned char urg:1;
unsigned char ack:1;
unsigned char psh:1;
unsigned char rst:1;
unsigned char syn:1;
unsigned char fin:1;
unsigned short windows; /* fenêtre */
unsigned short checksum; /* checksum */
unsigned short urgpointer; /* pointeur de données urgentes */
};
struct iphdr
{
unsigned char version:4; /* version du protocol IP*/
unsigned char ihl:4; /* longeur de l'en tète */
unsigned char tos; /* type de service */
unsigned short tot_len; /* longueur totale du datagramme */
unsigned short id; /* identification */
unsigned char M:1; /* flag M*/
unsigned char df:1; /* flag df*/
unsigned char mf:1; /* flag mf*/
unsigned short frag_off:13; /* décalage de fragmentation */
unsigned char ttl; /* durée de vie du paquet */
unsigned char protocol; /* protocole */
unsigned short checksum; /* somme de contrôle */
unsigned long saddr; /* adresse IP source */
unsigned long daddr; /* adresse IP destinataire */
};
struct paquettcp
{
struct iphdr ippart;
struct tcphdr tcppart;
struct pseudohdr pseudopart;
char data[4096];
};
unsigned short checksum(u_short *addr, int len);
main()
{
int taillepaquet=0;
char ipsource[200];
char ipdestination[200];
unsigned int ipid=0,frago=0,ttl=0,mf=0,df=0;
unsigned int portsrc=0,portdest=0,flagack,flagurg,flagfin,flagsyn,flagrst,
flagpsh,seqnum=0,acknum=0,decdata=0,win=0,urgptr=0;
char data[4096];
struct hostent *hotesrc,*hotedest;
struct paquettcp *lepaquet;
struct sockaddr_in sock;
int lasocket,i,nbPacket;
struct in_addr lasource;
WORD wVersionRequested;
WSADATA WSAData; /* structure WSADATA définie dans winsock.h */
int err;
wVersionRequested = MAKEWORD(2,0); /* 1.1 version voulu de Winsock */
err = WSAStartup(wVersionRequested, &WSAData); /* appel de notre fonction */
/* controle d'erreur */
if(err == 0) fprintf(stdout, "[*] Winsock a ete initialise avec succes.\n");
else {
fprintf(stderr, "Erreur lors de l'initialisation de Winsock, code d'erreur : %d\n", GetLastError());
return(-1);
}
printf("TCP MAKER\n");
lepaquet=(struct paquettcp *)calloc(1,sizeof(struct paquettcp));
printf("1. Configuration IP\n");
printf("IP source : ");
scanf("%199s", ipsource);
printf("IP destination : ");
fflush(stdin);
scanf("%199s", ipdestination);
/*
printf("IP id : ");
scanf("%d", &ipid); // identifiant IP du paquet
printf("IP FragOff : ");
scanf("%d", &frago);
printf("IP ttl : ");
scanf("%d", &ttl);
*/
/*printf("IP Frag DF : ");
scanf("%d", &df);
printf("IP Frag MF : ");
scanf("%d", &mf);*/
sock.sin_addr.s_addr=inet_addr(ipdestination);
unsigned int adr = inet_addr(ipdestination);
lasource.s_addr=inet_addr(ipsource);
if((lasource.s_addr=inet_addr(ipsource))==-1)
{
printf("Adresse IP non valide");
return 0;
}
printf("Verification des donnees IP entrees\n");
hotesrc=gethostbyaddr((char *)&lasource,sizeof(lasource),AF_INET); /*résoud ip source*/
hotedest=gethostbyaddr((char *)&sock.sin_addr.s_addr,sizeof(sock.sin_addr.s_addr),AF_INET); /*résoud ip destination*/
//hotesrc=gethostbyname(ipsource);
//hotedest=gethostbyname(ipdestination);
printf("%s\n", hotesrc->h_name);
printf("%s\n", hotedest->h_name);
printf("%s\n", hotesrc->h_addr);
printf("%s\n", hotedest->h_addr);
printf("%d\n", hotesrc->h_length);
printf("%d\n", hotedest->h_length);
system("PAUSE"); |