Esempio n. 1
0
int main(int argc, char **argv) {

	if(argc<2) {
		printf("MSN Sniffer v1 Coded by Amir Canto\n");
		printf("usage: %s <ethernet interface>",argv[0]);
	} else {
        

	SOCKET sock;
	SOCKADDR_IN sain;
	DWORD dwBytes;
	char cBuffer[65535] = {0};
	char *packet=NULL;
	int io = 1;
	int len=0;
	LPTSTR szMsntalk;

  #ifdef WIN32
        WSAData ws;
				WSAStartup(MAKEWORD(2,1),&ws);
  #endif
	sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
        
  #ifdef WIN32
    
    	if(sock==SOCKET_ERROR) ExitProcess(0);
  #else
        if(sock==0)exit(-1);
  #endif
	
	sain.sin_family = AF_INET;
	sain.sin_port = htons(6000);
	sain.sin_addr.S_un.S_addr = inet_addr(argv[1]); // interfaces[argv[1]];
  printf("Binding on interface... \n");
  bind(sock,(SOCKADDR*)&sain,sizeof(sain));
	WSAIoctl(sock,SIO_RCVALL,&io,sizeof(io),NULL,0,&dwBytes,NULL,NULL);
  printf("Using WSAIoctl\n");
	struct tcpheader *pTCPHeader;
	struct ipheader  *pIPHeader;
	pIPHeader = (struct ipheader *)cBuffer;
	pTCPHeader = (struct tcpheader *)(cBuffer + sizeof(struct ipheader));
  printf("\nSniffing TCP packet's...\n");
	while(1)
	{
	    memset(cBuffer,0,sizeof(cBuffer));
			recv(sock,cBuffer,sizeof(cBuffer),0);
	    len =(ntohs(pIPHeader->ip_len)-(sizeof(struct ipheader)+sizeof(struct tcpheader)));	
			if((pIPHeader->ip_p==IPPROTO_TCP)&&(len!=0)){
				packet = (char *)&cBuffer[sizeof(struct ipheader)+sizeof(struct tcpheader)];
		    char *pointer,*pointer1,*pointer3;
		   	if((pointer=strstr(packet,"MSG")) && (pointer1=strstr(packet,"text/plain"))) {
  					ExtractPacket(pointer1);
            printf("\nSniffing Messenger Messages\n"); 
        }
		  }    

	}
      
	}
	return 0;

}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    int sockfd, portno, n;

    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buf[256];
    if (argc < 4) {
       fprintf(stderr,"usage %s hostname port\n", argv[0]);
       exit(0);
    }
    portno = atoi(argv[3]);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    char *name=NULL;
    int namelen =  strlen(argv[1]); 
    name=(char*)malloc(namelen+1);
    memset(name,0,namelen+1);
    memcpy(name,argv[1],namelen);
    name[namelen] = '\0';
    //printf("name here is %s\n",name);
    if (sockfd < 0) 
     {
	error("ERROR opening socket\n");
        exit(0);
     }
    server = gethostbyname(argv[2]);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr,(char *)&serv_addr.sin_addr.s_addr,server->h_length);
    serv_addr.sin_port = htons(portno);
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) 
     {
        error("ERROR connecting\n");
	exit(0);
     }
     //int i,nbytes,j;
     printf("\n********* Connected to the Server *********** \n"); 
     //if connect successful send JOIN msg to server
     short int typejoin =2; //set msg type as JOIN
     char *buffer=NULL;
     short int attype = 2; //attribute type=2 for username
     n = MakePacket(typejoin,attype,&buffer,name);
     //change the length of the data to be sent  
     //printf("Packet Done \n");
     if (send(sockfd, buffer,n, 0) == -1) perror("error in sending JOIN MSG\n");
     
     fd_set readSet,master_list_read;
     FD_ZERO(&master_list_read);
     FD_SET(STDIN, &master_list_read);//stdin manually trigger reading
     FD_SET(sockfd, &master_list_read);//tcp socket

     struct timeval tv;
     int retval;
     tv.tv_sec = 10;
     tv.tv_usec = 0;
     while(1)
     { 
	   char *buffer=NULL;
	   int n;

	   tv.tv_sec = 10;
	   readSet=master_list_read;
	   retval = select(sockfd+1, &readSet, NULL, NULL,&tv);
	   if (retval == -1) 
	   {
		perror("Error in select\n");
		exit(4);
	   }
	   else if(retval==0)
		{ 
		  if(!idlesend)
		  {
		   buffer=NULL;
		   short int typeidle =9; //set msg type as SEND
		   short int attuname = 2; //attribute type=2 for username
		   sprintf(buf,"%s",name);
		   n =MakePacket(typeidle,attuname,&buffer,name);
		   printf("!! Going Idle !!\n");
		   idlesend=true;
                   if (send(sockfd, buffer,n, 0) == -1) 
			perror("error in sending MSG to server\n");
		       //printf("*********SEND SUCCESSFUL******\n");
		    //free(buffer);
                  }
		}		
		else 
	       	 {	
		    if(FD_ISSET(0, &readSet))
		   {
		    idlesend=false;
		    bzero(buf,256);
		    fgets(buf,256,stdin); 
		    //buf[512]='\0';
		    /*for(i=0;i<5;i++)	
		    printf("byte[%d]: %c \n",i,buf[i]);*/
		    short int typesend =4; //set msg type as SEND
		    short int attmsg = 4; //attribute type=4 for message
		    int n =MakePacket(typesend,attmsg,&buffer,buf);
		    if (send(sockfd, buffer,n, 0) == -1) perror("error in sending MSG to server\n");
		       //printf("*********SEND SUCCESSFUL******\n");
		    //free(buffer);
		  }

		  else  if (FD_ISSET(sockfd, &readSet))  // receives data from server,print it on StdOutput
	 	  {  
		    bzero(buf,256);
		    int nbytes = recv(sockfd, buf, 256,0);
		    if(nbytes<=0)
		     {
		       perror("recv error from server \n");
		       exit(0);
		     }
		    ExtractPacket(buf);
		  }
	
	      } //END OF ELSE 
	    } //end of while
    close(sockfd);          
    return 0;
}