rendered paste body#include <stdio.h>#include <stdlib.h>#include <winsock2.h>#include <iostream.h>#include <fstream.h>#pragma comment(lib,"ws2_32.lib")#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)#define IP "192.168.0.3" //Ip de votre carte rezovoid print_data(int datalen, char *data);typedef struct iphdr{ unsigned char verlen; unsigned char tos; unsigned short tot_len; unsigned short id; unsigned short offset; unsigned char ttl; unsigned char protocol; unsigned short checksum; unsigned int saddr; unsigned int daddr;} IP_HDR;typedef struct tcphdr{ unsigned short sport; unsigned short dport; unsigned int seqnum; unsigned int acknum; unsigned char DataOffset; unsigned char Flags; unsigned short Window; unsigned short Checksum; unsigned short UrgPointer;} TCP_HDR;void main(){printf("Welcome to the Real World, Ivanlef0u\n\n"); WSAData wsaData; SOCKET Sock; struct sockaddr_in SockAddr; DWORD BytesReturned; int I = 1; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { printf("WSAStartup() failed.\n"); exit(-1); } Sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP); if (Sock == INVALID_SOCKET) { printf("socket() failed.\n"); exit(-1); } memset(&SockAddr, 0, sizeof(SockAddr)); SockAddr.sin_addr.s_addr = inet_addr(IP); SockAddr.sin_family = AF_INET; SockAddr.sin_port = 0; if (bind(Sock, (sockaddr *)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR) { printf("bind(%s) failed.\n", IP); exit(-1); } if (WSAIoctl(Sock, SIO_RCVALL, &I, sizeof(I), NULL, NULL, &BytesReturned, NULL, NULL) == SOCKET_ERROR) { printf("WSAIoctl() failed.\n"); exit(-1); } char RecvBuf[65535]={0};while (1){ memset(RecvBuf,0,sizeof(RecvBuf)); recv(Sock,RecvBuf,sizeof(RecvBuf),0);IP_HDR *pIpHeader;TCP_HDR *pTcpHeader;pIpHeader=(IP_HDR *)RecvBuf; //Adresse du pointer ip est egal au debut de l'header IPpTcpHeader=(TCP_HDR *)(RecvBuf + sizeof(IP_HDR)); //Adresse du pointeur header TCPchar sourceIP[16], destIP[16];SOCKADDR_IN sasource, sadest;sasource.sin_addr.s_addr=pIpHeader->saddr;strncpy(sourceIP,inet_ntoa(sasource.sin_addr),16);sadest.sin_addr.s_addr=pIpHeader->daddr;strncpy(destIP,inet_ntoa(sadest.sin_addr),16);u_char protocol=pIpHeader->protocol;char proto[12];switch(protocol){case 0x1:strcpy(proto,"ICMP"); break;case 0x6: strcpy(proto,"TCP"); break;case 0x11 :strcpy(proto,"UDP"); break;default: strcpy(proto,"Inconnu"); break;}printf("Begin Packet\n"); printf("*******BEGIN IP HEADER*******\n");printf("Source IP: %s\n",sourceIP);printf("Destination Ip: %s\n",destIP);printf("Protocol: %s\n",proto);printf("Time To Live: %d\n",pIpHeader->ttl);printf("*******END IP HEADER*******\n");if(strcmp(proto,"TCP")==0) //Seulement si on a du TCP{char flags=pTcpHeader->Flags;char fin=1,syn=2,rst=4,psh=8,ack=0x10,urg=0x20;printf("*******BEGIN TCP HEADER*******\n");printf("Source Port: %d\n",ntohs(pTcpHeader->sport));printf("Destination Port: %d\n",ntohs(pTcpHeader->dport));printf("Numero de sequence: %d\n",ntohl(pTcpHeader->seqnum));printf("Numero d'acquittement: %d\n",ntohl(pTcpHeader->acknum));printf("Champ fenetre: %d\n",ntohs(pTcpHeader->Window));printf("Flags: %d\n",pTcpHeader->Flags);if (flags & fin) //finprintf("Fin\n"); if (flags & syn)//synprintf("Syn\n");if(flags & rst) //rstprintf("Rst\n");if (flags & psh) //pshprintf("Psh\n");if (flags & ack) //ackprintf("Ack\n");if (flags & 0x20) //urgprintf("Urg\n");printf("*******END TCP HEADER*******\n");int datalen;datalen=(ntohs(pIpHeader->tot_len)) - sizeof(IP_HDR) - sizeof(TCP_HDR);if(datalen>0) { printf("*******BEGIN DATAS*******\n"); u_char *data=(u_char *) RecvBuf + (sizeof(IP_HDR) + sizeof(TCP_HDR)); for (int i=0; i<datalen;i++) { if ((*(data+i) >= 20) && (*(data+i) <= 127)) printf("%c",*(data+i)); else printf("."); } printf("*******END DATAS*******\n"); }}printf("End Packet\n\n");}}