Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Statystyka najwyzszych wynikow

Ostatnio zmodyfikowano 2009-12-20 20:22
Autor Wiadomość
Rantrave
Temat założony przez niniejszego użytkownika
Statystyka najwyzszych wynikow
» 2009-12-20 20:09:08
Witam,


14:48:39.315039 IP 153.19.48.161.138 > 153.19.48.255.138: NBT UDP PACKET(138)
14:48:39.357703 IP6 fe80::20f:eaff:fe33:1738 > ff02::1:ff00:1: ICMP6, neighbor solicitation, who has 2001:4200:1010::1, length 32
14:48:39.358767 IP6 fe80::20f:eaff:fe33:1738 > ff02::1:ff00:13: ICMP6, neighbor solicitation, who has 2001:4f8:0:2::13, length 32
14:48:39.446684 IP6 fe80::20f:eaff:fe33:1738 > ff02::1:ff00:10: ICMP6, neighbor solicitation, who has 2001:13c7:7002:3000::10, length 32
14:48:39.489778 arp who-has 153.19.48.208 tell 153.19.48.254
14:48:39.509509 IP 153.19.48.3.1066 > 255.255.255.255.5200: UDP, length 21
14:48:39.510318 IP 153.19.48.3.1088 > 234.8.7.1.1088: UDP, length 64

W pliku tekstowym mam takie dane, teraz chce napisac funkcje, która przeszuka taki plik, znajdzie jakiś IPv4 , a potem zliczy ich ilość wystepowań takich pakietów, przeszuka tak ten plik i stworzy statystykę 10 najczęściej pojawiających sie IP z ich ilością

O to co wykombinowałem
C/C++
void highscore( string komenda ) // wyszukiwanie IP i tworzenie highscore
{
   
    ifstream plik;
    plik.open( komenda.c_str() ); // otwiera dany plik
   
    string linia;
    string losowyIP;
    getline( plik, linia ); // wczytywanie linia po linii
    losowyIP = linia.substr( 19, 18 ); // Przypisanie stringowi adresu IP
    plik.close();
   
    plik.open( komenda.c_str() ); // Przeliczenie ilosci pojawiania sie danego IP
    int iloscIP = 0; // Ilosc danego IP
    while( getline( plik, linia ) )
    {
        if( linia.find( losowyIP ) != 0xFFFFFFFF ) //wyszukiwanie IP
        {
            iloscIP++;
        }
    }
   
    cout << losowyIP << endl;
    cout << iloscIP << endl;
    plik.close();
   
}

Wyszukuje pierwszy IP, i zlicza jego ilość, teraz nie wiem jak to zapędzić, żeby przeszukał cały plik i zrobil całą statystykę, gdy próbowałem wrzucić warunek:
Porównania linii z stringiem losowyIP (gdzie tutaj byłby ten pierwszy IP), że jak jest różny od tego losowyIP to przyjmuje on nową wartość i przeszukuje cały plik pod jego kątem: coś ala

linia = text.substr(19, 18)
If linia != losowyIP;
jednakże jak wrzucałem w pętle przeszukującą cały plik linia po linii krzaczyło coś, że string jest zbyt duży i wyrzucało "?"

Ktoś może ma pomysł na inne rozwiązanie lub poprawkę?
P-12343
Patzick
» 2009-12-20 20:22:42
wczytaj sobie do jednego stringa wszystko
C/C++
while( !plik.eof() )
{
    getline( plik, jakis_string );
}
a potem przeszukuj cały przeszukaj pętlą powtarzających się przeszukań, coś w stylu
C/C++
loc = jakis_string.find( "IP", end );
loc += 3;
end = zapis_pliku.find( ">", loc );
end--;
int dl = end - loc;
string IP[ jakas_tablica ] = jakis_string.substr( loc, dl );
to wyciągnie tylko pierwsze IP, ale to już sobie możesz dopisać zależności z pliku i wstawić w pętlę :)
P-12344
« 1 »
  Strona 1 z 1