All pastes #628198 Raw Edit

ivan

public cpp v1 · immutable
·published 2007-07-20 20:11 UTC
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");}}