int main(int argc, char *argv[]) { int fd_listen; fd_listen = socket(AF_INET,SOCK_STREAM,0); signal(17,child_handle); iferr(fd_listen); struct sockaddr_in my,clientaddr; socklen_t sock_len = sizeof(clientaddr); init(&my); iferr(bind(fd_listen,(struct sockaddr*)&my,16)); iferr(listen(fd_listen,5)); int client; printf("start\n"); while(1){ sock_len = sizeof(clientaddr); memset(&clientaddr,0,(int)sock_len); client = accept(fd_listen,(struct sockaddr*)&clientaddr,&sock_len); printf("client : %s:%d connrct!\n",inet_ntoa(clientaddr.sin_addr),ntohs(clientaddr.sin_port)) ; if(fork()==0) { close(fd_listen); child_main(client); close(client); exit(1); } close(client); } printf("end\n"); wait(NULL); }
int main(int argc, char *argv[]) { char *uri = lookup_uri(argv[1]); int psize = 0; int error = 0; int count = 0; libtrace_packet_t *packet; trace = trace_create(uri); iferr(trace); trace_start(trace); iferr(trace); packet=trace_create_packet(); for (;;) { double ts; double tsdiff; struct timeval tv; if ((psize = trace_read_packet(trace, packet)) <0) { error = 1; break; } if (psize == 0) { error = 0; break; } count ++; tv=trace_get_timeval(packet); ts=trace_get_seconds(packet); tsdiff = (tv.tv_sec+tv.tv_usec/1000000.0)-ts; assert(tsdiff > -0.001 && tsdiff < 0.001); } trace_destroy_packet(packet); if (error == 0) { if (count == 100) { printf("success: 100 packets read\n"); } else { printf("failure: 100 packets expected, %d seen\n",count); error = 1; } } else { iferr(trace); } trace_destroy(trace); return error; }
int main(int argc, char* argv[]) { if(argc != 2) { fprintf(stderr, "Missing *.pcap file path as argument"); exit(1); } char* filepath = argv[1]; setvbuf(stdout, NULL, _IOLBF, 0); printf("Starting...\n"); long int total_ns; struct timespec start_time; struct timespec end_time; int exit_code = 0; int i, psize = 0; libtrace_packet_t **packets = malloc(100 * sizeof(libtrace_packet_t*)); i = 0; char* trace_string = malloc(5 + strlen(filepath) + 1); strcpy(trace_string, "pcap:"); strcat(trace_string, filepath); libtrace_t* trace = trace_create(trace_string); iferr(trace); trace_start(trace); libtrace_packet_t* packet = trace_create_packet(); while ((psize = trace_read_packet(trace, packet)) > 0){ libtrace_tcp_t* tcp = trace_get_tcp(packet); if(tcp != NULL){ packets[i++] = packet; packet = trace_create_packet(); } } int len = i; for (i = 0; i < 1000; i++) { clock_gettime(CLOCK_MONOTONIC, &start_time); test(packets, len); clock_gettime(CLOCK_MONOTONIC, &end_time); total_ns += (end_time.tv_sec - start_time.tv_sec) * 1000000000 + (end_time.tv_nsec - start_time.tv_nsec); } int runs = i; for (i = 0; i < len; i++){ trace_destroy_packet(packets[i]); } free(packets); printf("Took %ld nanoseconds.\n", total_ns/runs); }
int main(int argc, char *argv[]) { int psize = 0; int error = 0; int count = 0; int level = 0; int expected = 100; libtrace_t *trace; libtrace_out_t *outtrace; libtrace_packet_t *packet; trace = trace_create(lookup_uri("pcap")); iferr(trace); outtrace = trace_create_output(lookup_out_uri("pcap")); iferrout(outtrace); level=0; trace_config_output(outtrace,TRACE_OPTION_OUTPUT_COMPRESS,&level); iferrout(outtrace); trace_start(trace); iferr(trace); trace_start_output(outtrace); iferrout(outtrace); packet=trace_create_packet(); for (;;) { if ((psize = trace_read_packet(trace, packet)) <0) { error = 1; break; } if (psize == 0) { error = 0; break; } count ++; /* Force promotion */ if (trace_get_source_port(packet)==80) { trace_set_direction(packet,TRACE_DIR_OUTGOING); assert(trace_get_direction(packet)==TRACE_DIR_OUTGOING); assert(trace_get_source_port(packet)==80); } else { trace_set_direction(packet,TRACE_DIR_INCOMING); assert(trace_get_direction(packet)==TRACE_DIR_INCOMING); } /* And then force demotion */ trace_write_packet(outtrace,packet); iferrout(outtrace); if (count>100) break; } trace_destroy_packet(packet); if (error == 0) { if (count != expected) { printf("failure: %d packets expected, %d seen\n",expected,count); error = 1; } } else { iferr(trace); } trace_destroy(trace); trace_destroy_output(outtrace); return error; }
int main(int argc, char *argv[]) { int psize = 0; int error = 0; int ip_count = 0; int arp_count = 0; libtrace_t *trace; libtrace_packet_t *packet; (void)argc; (void)argv; trace = trace_create("pcapfile:traces/vxlan.pcap"); iferr(trace); trace_start(trace); iferr(trace); packet=trace_create_packet(); for (;;) { uint8_t proto; uint32_t remaining; void *transport; void *layer2; void *vxlan; if ((psize = trace_read_packet(trace, packet)) < 0) { error = 1; iferr(trace); break; } if (psize == 0) { break; } transport = trace_get_transport(packet, &proto, &remaining); if (proto != TRACE_IPPROTO_UDP) { printf("Failed to find a UDP header\n"); error = 1; continue; } vxlan = trace_get_vxlan_from_udp(transport, &remaining); if (!vxlan) { printf("Failed to find a VXLAN header\n"); error = 1; continue; } layer2 = trace_get_payload_from_vxlan(vxlan, &remaining); switch (ntohs(((libtrace_ether_t *)layer2)->ether_type)) { case 0x0800: ip_count++; break; case 0x0806: arp_count++; break; default: fprintf(stderr, "Unexpected vxlan ethertype: %08x\n", ntohs(((libtrace_ether_t *)layer2)->ether_type)); error = 1; continue; } } trace_destroy_packet(packet); if (ip_count != 8 || arp_count != 2) { fprintf(stderr, "Incorrect number of ip/arp packets\n"); error = 1; } if (error == 0) { printf("success\n"); } else { iferr(trace); } trace_destroy(trace); return error; }