Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
0
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;
    }
}
Пример #4
0
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;
    }
}