Auf einem Linux-Router schrieb ich ein C-Programm, das pcap verwendet, um den IP-Header und die Länge des Pakets zu erhalten. Auf diese Weise kann ich Statistiken sammeln und Bandbreite basierend auf IP messen. Ziemlich ordentlich. :-)Alternative zu pcap (Linux)
Jetzt ist der Verkehr und die Anzahl der Benutzer gewachsen, und das alte Programm beginnt zu kämpfen. Das heißt, der Router hat Mühe, mit der großen Menge an Paketen fertig zu werden. Es sind insgesamt über 50000 Pakete pro Sekunde in der "Prime Time".
Das Programm selbst ist ziemlich optimiert. Ich möchte nicht angeben, aber ich glaube, es ist so gut wie es nur geht. Es liest den IP-Header und die Paketlänge. Es wandelt dann die IP in einen Index um (nur eine einfache Subtraktion), und die Länge des Pakets wird in einem Array gespeichert (akkumuliert). Hin und wieder (eigentlich ein SIGALRM) speichert es das Array in einer MySQL-Datenbank.
Meine Frage ist: Gibt es eine andere Möglichkeit, ein Ethernet-Gerät anzuzapfen, um den Bit-Stream "billiger" als pcap zu bekommen?
Ich kann natürlich den Ethernet-Treiber ändern, um einzelne IP-Statistiken zu erfassen, aber das scheint ein wenig übertrieben.
Grundsätzlich ist mein Programm ein 'tcpdump' auf einem beschäftigten eth0 und das wird schließlich meinen Router töten.
Können Sie etwas wie Portspiegelung konfigurieren und die Analyse auf einer anderen Maschine durchführen? – cnicutar
Haben Sie verschiedene Netflow-Tools wie [softflowd] (http://code.google.com/p/softflowd/) untersucht? Das klingt schrecklich nah dran. – andri
Andri: Leider basiert softflowd auf libpcap, das hilft nicht viel. –