Exemplo n.º 1
0
int main(int argc, char **argv)
{
   int i;
   libnet_ptag_t ipTag, etherTag, tcpTag, c;
   char errbuf[LIBNET_ERRBUF_SIZE]; 
  
   sprintf(DA,"%02x:%02x:%02x:%02x:%02x:%02x",
         0x0,0xB,0xB,0xB,0xB,0xB); 
   memset(seq,0,NUM_PKTS);

   l = libnet_init(LIBNET_LINK_ADV, "nf2c0", errbuf);
   if(l == NULL)
   {
      printf("erro em init()\n");
      goto bad;
   }
   getDados();
   for(i=0;i<NUM_PKTS;i++){
      tcpTag = buildTCP(0,seq[i]);   
      if (tcpTag == -1)
         goto bad;
      ipTag = buildIP(0,IPPROTO_TCP);   
      if (ipTag == -1)
         goto bad;
      etherTag = buildEth(0);   
      if (etherTag == -1)
         goto bad;
      c = libnet_write(l);
      if(c == -1)
         goto bad;
      libnet_write(l);
      libnet_destroy(l);
      seq[i] = LIBNET_IPV4_H+LIBNET_TCP_H+PAYLOAD_L+1; 
      l = libnet_init(LIBNET_LINK_ADV, "nf2c0", errbuf);
      getDados();
   }
//ack
   for(i=0;i<NUM_PKTS;i++){
      tcpTag = buildTCP(1,seq[i]);   
      if (tcpTag == -1)
         goto bad;
      ipTag = buildIP(1,IPPROTO_TCP);   
      if (ipTag == -1)
         goto bad;
      etherTag = buildEth(1);   
      if (etherTag == -1)
         goto bad;
      c = libnet_write(l);
      if(c == -1)
         goto bad;
      libnet_write(l);
      libnet_destroy(l);
      seq[i] = seq[i]+LIBNET_IPV4_H+LIBNET_TCP_H+PAYLOAD_L+1; 
      l = libnet_init(LIBNET_LINK_ADV, "nf2c0", errbuf);
      getDados();
   }
//ack do ack   
   for(i=0;i<NUM_PKTS;i++){
      tcpTag = buildTCP(0,seq[i]);   
      if (tcpTag == -1)
         goto bad;
      ipTag = buildIP(0,IPPROTO_TCP);   
      if (ipTag == -1)
         goto bad;
      etherTag = buildEth(0);   
      if (etherTag == -1)
         goto bad;
      c = libnet_write(l);
      if(c == -1)
         goto bad;
      libnet_write(l);
      libnet_destroy(l);
      seq[i] = seq[i]+LIBNET_IPV4_H+LIBNET_TCP_H+PAYLOAD_L+1; 
      l = libnet_init(LIBNET_LINK_ADV, "nf2c0", errbuf);
      getDados();
   }

   for(i=0;i<NUM_PKTS;i++){
      tcpTag = buildUDP(0);   
      if (tcpTag == -1)
         goto bad;
      ipTag = buildIP(0,IPPROTO_UDP);   
      if (ipTag == -1)
         goto bad;
      etherTag = buildEth(0);   
      if (etherTag == -1)
         goto bad;
      c = libnet_write(l);
      if(c == -1)
         goto bad;
      libnet_write(l);
      libnet_destroy(l);
      seq[i] = seq[i]+LIBNET_IPV4_H+LIBNET_TCP_H+PAYLOAD_L+1; 
      l = libnet_init(LIBNET_LINK_ADV, "nf2c0", errbuf);
      getDados();
   }

   libnet_destroy(l);
   return 0;
bad:
   libnet_destroy(l);
   return -1;
}
Exemplo n.º 2
0
//funcionalidade 1
void criaArquivoBin(char *nomeArquivo){
	char registro[1000];
	char *paginaCab;
	FILE *arquivoLido, *arquivoBin;
	Cabecalho c;

	//abrindo os arquivos
	arquivoBin = fopen("arquivoTrab1.bin", "wb");
	arquivoLido = fopen(nomeArquivo, "r");
	
	//caso de erro: um dos arquivos nao existe
	if(arquivoLido == NULL || arquivoBin == NULL){
		printf("Falha no carregamento do arquivo.");
		if(arquivoLido != NULL)
			fclose(arquivoLido);
		if(arquivoBin != NULL)
			fclose(arquivoBin);
		return;
	}

	c = inicializaCab();		//inicaliza o registro de cabecalho
	c.status = '0';				//status '0' para indicar que o arquivo binario esta aberto

	//obtencao do registro de cabecalho
	c = getCabecalho(arquivoLido, c);
	c = ajustaCabecalho(c);

	//obtencao da pagina de cabecalho
	paginaCab = getPaginaCab(c);
	fwrite(paginaCab, 32000, 1, arquivoBin);

	//obtencao das demais paginas
	while(!feof(arquivoLido)){
		char *pagina;
		int offset = 0, offsetTamRegistro = 0, tamRegistro = 0, tamRegAnterior = 0;
		fpos_t posAnterior;

		pagina = (char *) malloc(sizeof(char) * 32000);

		while(offset < 32000){
			Dados d;
			d = inicializaRegDados();
			fgetpos(arquivoLido, &posAnterior);
			tamRegAnterior = tamRegistro;
			d = getDados(arquivoLido, d);
			tamRegistro = d.tamanhoRegistro;
			if(d.idServidor == -1){
				/* uma vez que o idServidor nao admite valores invalidos (o que ja eh garantido pelo csv), um valor
				invalido nesse campo (ocorre quando fscanf retorna 0, ver funcao getDados) indica o final do arquivo csv.*/
				fwrite(pagina, offset, 1, arquivoBin);
				offset = 32000;
			}
			else if((d.tamanhoRegistro + 5) <= (32000 - offset)){
				//caso o registro ainda couber na pagina ele sera copiado para a mesma
				pagina = getPaginaDados(d, pagina, &offset, &offsetTamRegistro);
			}
			else{
				/*caso o registro nao couber na pagina, mas o csv ainda nao estiver no final, preenche-se o resto
				da pagina com '@', e retorna-se o ponteiro de posicao do arquivo para a posicao que estava antes
				de ler o registro atual, de forma que ele seja lido novamente e copiado para a proxima pagina.*/
				for(int i = offset; i < 32000; i++){
					pagina[i] = '@';
					tamRegAnterior++;
				}
				memcpy(&pagina[offsetTamRegistro], &tamRegAnterior, 4);
				offset = 32000;
				fwrite(pagina, 32000, 1, arquivoBin);
				fsetpos(arquivoLido, &posAnterior);				
			}
			free(d.nomeServidor);
			free(d.cargoServidor);
		}

		free(pagina);
	}

	free(paginaCab);

	c.status = '1';			//status '1' indica que o arquivo binario foi fechado corretamente
	rewind(arquivoBin);
	fwrite(&c.status, 1, 1, arquivoBin);
	
	//fechando os arquivos
	fclose(arquivoLido);
	fclose(arquivoBin);

	printf("%s", "arquivoTrab1.bin");

}