void cabecalhoEthernet(unsigned char *packet, int len, int imp_tipo) { struct ethhdr *c_ethernet; if(len > sizeof(struct ethhdr)) { c_ethernet = (struct ethhdr *)packet; //Aponta para o campo de MAC destino e imprime os proximos 6 bytes imprimirBytes("MAC destino: ", c_ethernet->h_dest, 6, imp_tipo ); //Aponta para o campo de MAC origem e imprime os proximos 6 bytes imprimirBytes("MAC origem: ", c_ethernet->h_source, 6, imp_tipo); } else { printf("Cabecalho Ethernet defeituoso!\n"); } }
void imprimirMemoria(){ uint32_t offset, tamanio; printf("Indique un offset desde el comienzo de la memoria"); scanf("%d", &offset); while( getchar() != '\n'); printf("Indique una cantidad de bytes"); scanf("%d", &tamanio); while( getchar() != '\n'); printf("El tamanio es %d", tamanio); printf("El offset es %d", offset); if( memoria_size < (tamanio + offset)){ log_error( logger, "Se ha producido Segmentation Fault a causa de indicar una cantidad de bytes que sobrepasa el tamaño de la memoria"); printf("Se ha producido Segmentation Fault a causa de indicar una cantidad de bytes que sobrepasa el tamaño de la memoria\n"); } else{ imprimirBytes( 0, offset, tamanio, PorARCHIVO); } }
int cabecalhoDados (unsigned char *p, int tam, int imp_tipo) { struct ethhdr *c_ethernet; struct iphdr *c_ip; struct tcphdr *c_tcp; unsigned char *c_dados; int tamanho_dados; if(tam > (sizeof(struct ethhdr) + sizeof(struct iphdr) + sizeof(struct tcphdr))) { c_ip = (struct iphdr*)(p + sizeof(struct ethhdr)); c_dados = (p + sizeof(struct ethhdr) + c_ip->ihl*4 +sizeof(struct tcphdr)); //tot_len inclui o valor ip+tcp+dados (ihl utilizado pois ip possuí campos variaveis) tamanho_dados = ntohs(c_ip->tot_len) - c_ip->ihl*4 - sizeof(struct tcphdr); if(tamanho_dados!=0) { printf("Tamanho do cabecalho de dados: %d\n", tamanho_dados); imprimirBytes("Dados:", c_dados, tamanho_dados, imp_tipo); return 1; } else { printf("Nao existe dados no pacote\n"); return 0; } } else { printf("Nao existe dados no pacote\n"); return 0; } }