analiza bufora pcap - zagniezdzona petla

Odpowiedz Nowy wątek
2018-05-09 20:30

Rejestracja: 1 rok temu

Ostatnio: 1 rok temu

0

Cześć

Robię projekt polegający na analizie ruchu sieciowego pcap. Stworzyłem klasy które odczytują dane(czas oraz rozmiar pakietu) z pliku wejściowego oraz wyjściowego w formacie .pcap i to działa poprawnie. Problem mam z logarytmem który sprawdza stan bufora (ile razy bufor był pusty, ile razy wyjęcie danych się nie powiodło, czas przez jaki bufor był pusty oraz rozmiar końcowy bufora).
Docelowo metoda analysis_buffer ma chronologicznie pod wzgledem czasu input/output_time dodawać lub odejmować input/output_size (jeśli kilka razy pod rząd pakiet jest wychodzący to odejmuje z bufora, analogicznie do niego do dodaje jeśli wchodzi do bufora), dane te sprawdzam w pętlach, pierwsza puszczona jest po wielkości tablicy z danymi z pliku wejściowego, druga zagnieżdżona ustawiona jest na wielkość tablicy z pakietami wyjściowymi. Program działa jednak końcowy output jest niepoprawny.

"Final buffer size: 1227700210.
Buffer was empty 1 times.
Failed attempt to output data from the buffer: 0 times.
Total time for which the buffer was empty: 0.0 seconds."

Wrzucam kod z dwóch metod, więcej chyba nie jest potrzebne.

    int buffer_size = 0;      //currently size the buffer
    int failed_attempt =0;    //count unsuccessful attempt to output packet from the buffer
    double time_empty = 0;    //time for which buffer was empty
    int count_empty =0;       //count for which buffer was empty

public void analysis_buffer(PcapPacketArrayList packetArrayList, PcapPacketArrayList packetArrayList2, double[] input_time, double[] output_time, int[] input_size, int[] output_size) {

        for (int i = 0; i < packetArrayList.size(); i++) {

            for (int j = 0; j < packetArrayList2.size(); j++) {

                // if output time is greater than input time, add input size to main buffer size
                if (input_time[i] < output_time[j]) {
                    buffer_size = buffer_size + input_size[i];              
                    }

                //  if input time is greater than output time, we have 3 options
                //  1. buffer size is greater than output size packet and output is subtracted from buffer size
                //  2. buffer size is smaller than output packet - buffer size is automatically equal 0 
                //  3. buffer size is equal 0, I'm increasing unsuccessful attempt to get out of the buffer and saves time when buffer was empty 

                if (input_time[i] > output_time[j]) {

                        if(output_size[j] < buffer_size) {                                      
                            buffer_size = buffer_size - output_size[j];
                            }

                        if(output_size[j] > buffer_size) {
                            buffer_size = 0;
                            count_empty++;
                            }

                        if(buffer_size == 0) {
                            failed_attempt++;
                            time_empty = time_empty + (output_time[j+1]-output_time[j]);
                            }
                        }               

                // if input time is equal output time, add and subtract packets from buffer size or buffer size is automatically equal 0
                if (input_time[i] == output_time[j]) {

                    if(output_size[j] < buffer_size) {
                        buffer_size = buffer_size + input_size[i] - output_size[j];
                        }

                    if(output_size[j] > (buffer_size + input_size[i])){
                        buffer_size = 0;
                        count_empty++;
                        }
                    }               
                }
            }
        }

    public void check_buffer() {

        System.out.println("Initial buffer size was 0");
        System.out.println("Final buffer size: " + buffer_size +".");
        System.out.println("Buffer was empty " + count_empty +" times.");
        System.out.println("Failed attempt to output data from the buffer: " + failed_attempt +" times.");
        System.out.println("Total time for which the buffer was empty: " + time_empty + " seconds.");
        }

I teraz pytanie, w dobry sposób zabrałem się za porównywanie dwóch plików? w czym jest problem, że działania nie wykonują się poprawnie i po przejściu pętli zmienne maja dalej wartość zerowa? Każda wskazówka jest na wagę złota!

Pozostało 580 znaków

2018-05-11 14:20

Rejestracja: 12 lat temu

Ostatnio: 1 dzień temu

0

Fajny kod. Masz nawet opisane poszczególne testy jednostkowe do niego :

                //  if input time is greater than output time, we have 3 options
                //  1. buffer size is greater than output size packet and output is subtracted from buffer size
                //  2. buffer size is smaller than output packet - buffer size is automatically equal 0 
                //  3. buffer size is equal 0, I'm increasing unsuccessful attempt to get out of the buffer and saves time when buffer was empty 

Wystarczy je zaimplementować, czyli pociąć ten kod na mniejsze fragmenty i zobaczyć co się dzieje.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0