All pastes #534853 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-06-03 22:10 UTC
rendered paste body
//-----------------------Includes
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <signal.h>
#include <iostream>


//-----------------------
#define MAXDATASIZE 100

//-----------------------MISC
#pragma comment(lib, "wsock32")
using namespace std;
//-----------------------

/* Open a raw socket, ready for IP header creation and broadcast addresses */
int TheRawSocket()
{
		SOCKET s;
		s = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); //Create a RAW socket
		int optval=1;
		setsockopt(s, IPPROTO_IP, IP_HDRINCL, (char *)&optval, sizeof optval);  //Set it to include the header
return 0;
}


void WSA()
{
		//Check WSA
	WSADATA wsaData; // if this doesn't work
		//WSAData wsaData; // then try this instead
		if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
		fprintf(stderr, "WSAStartup failed.\n");
		exit(1);
		}
}


int main()
{
	char buf[MAXDATASIZE];
	char DEST_IP[25];
	int DEST_PORT;
	int numbytes;

	cout << "[Socket] IP Please: ";
	cin >> DEST_IP;
	cout << "[Socket] Port Please: ";
	cin >> DEST_PORT;


	//Always check WSA :)
	WSA();

	//Variables
	int ret;
	
	//Connect====================================================================================
	int sockfd;
		struct sockaddr_in dest_addr; // will hold the destination addr
		sockfd = socket(PF_INET, SOCK_STREAM, 0); // do some error checking!

		dest_addr.sin_family = AF_INET; // host byte order
		dest_addr.sin_port = htons(DEST_PORT); // short, network byte order
		dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
		memset(dest_addr.sin_zero, '\0', sizeof dest_addr.sin_zero);
		 
			 ret = connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)); //Connect 
			 TheRawSocket(); //The Raw Socket
	

			 if(ret == 0)
			 {
				 cout << "Socket: Connected :)" << endl;
				 recv(sockfd, buf, MAXDATASIZE-1, 0);
			 }
			 else
				 cout << "Socket: Connection Failer :(" << endl;

				if ((numbytes=recv(sockfd, buf, MAXDATASIZE-1, 0)) == -1)
				{
				cout << "recv" << endl;
				exit(1);
				}
			 
		  buf[numbytes] = '\0'; //The Buffer Variable
     	  printf("Received: %s",buf);



		 //Just an error check, its printing atm
		 if(sockfd == INVALID_SOCKET)	
			cout << "sockfd is not working..." << endl;
	//Connect====================================================================================

		
	cin.get();
}