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
void highscore( string komenda )
{
ifstream plik;
plik.open( komenda.c_str() );
string linia;
string losowyIP;
getline( plik, linia );
losowyIP = linia.substr( 19, 18 );
plik.close();
plik.open( komenda.c_str() );
int iloscIP = 0;
while( getline( plik, linia ) )
{
if( linia.find( losowyIP ) != 0xFFFFFFFF )
{
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ę?