int main( int argc, char **argv ) { Config config(argc, argv); if( config.help ) { std::cout << config.desc() << std::endl; return 0; } if( config.list_interfaces ) { print_interfaces(std::cout); return 0; } if( config.host.empty() && config.filter.empty() ) { std::cerr << "Error: One of either --host or --filter is required." << std::endl; std::cerr << config.desc() << std::endl; return 1; } if( config.interface.empty() ) { std::cerr << "Error: You must specify the network interface. (-i)" << std::endl; std::cerr << config.desc() << std::endl; print_interfaces(std::cerr); return 1; } libpcap::live_capture pcap(config.interface, config.pcap_filter(), config.cap_timeout); if( pcap.has_error() ) { std::cerr << "Error while setting up libpcap: "; std::cerr << pcap.get_error() << std::endl; return 1; } thread_t pcap_thread( [&pcap]{ pcap.capture_loop(); } ); Stats::Tracker tracker(pcap, config.sample_period, config.quantum_period); std::cout << "Listening..." << std::endl; size_t dropped_count = 0; for(;;) { auto _count = pcap.dropped_count(); if( _count > dropped_count ) { std::cerr << "Warning: " << _count - dropped_count << " packets have been dropped." << std::endl; dropped_count = _count; } const auto peer_data = tracker.snapshot(); Analysis::print_status(peer_data, config); Analysis::check_events(peer_data, config); this_thread::sleep_for(config.quantum_period); } pcap_thread.join(); return 0; }
bool read_pcap_file(const char *filename) { bool res= false; FILE *fp = fopen(filename,"rb"); if (fp) { { // <-- scope for Pcap_file Pcap_file pcap(fp); if (pcap.get_header()) { res = true; unsigned char * data=0; int limit = g_app->get_limit(); do { int s,us,len; data = pcap.get_packet(len, s, us); if (len && data) { if (limit && g_packet_number>limit) break; Packet p(data, len, s, us, g_packet_number++, pcap.get_link_layer_type() ); p.parse(); } } while (data!=0); } } fclose(fp); } return res; }
void MainView::saveFileSelect() { try { PcapHandler pcap(this->saveFile.toStdString()); pcap.writeFile(packetsData); } catch (std::exception e) { std::cerr << "Impossible de sauvegarder le fichier : "<< e.what() << std::endl; } }
void MainView::openFileSelect() { packets.clear(); packetsData.clear(); try { PcapHandler pcap(this->openFile.toStdString()); packetsData = pcap.getPackets(); for (Ethernet *pkt : packetsData) packets.push_back(new EthernetDisplay(pkt)); emit packetsChanged(); } catch (std::exception e) { std::cerr << "Impossible d'ouvrir le fichier : "<< e.what() << std::endl; } }