Gewusst wie: Erfassen von Netzwerk-Pakete zu MySQL

Ich werde das design ein network Analyzer für WLAN (802.11)
Derzeit nutze ich tshark zu erfassen und zu analysieren, die WiFi-frames und leiten Sie die Ausgabe an ein perl-Skript zum speichern der analysierten Daten auf die Mysql-Datenbank.

Ich habe gerade erfahren, dass ich vermisse eine Menge von frames in diesem Prozess. Ich überprüft, und die Rahmen scheinen verloren zu gehen, während das Rohr (wenn der Ausgang geliefert wird, um perl zu bekommen srored in Mysql)
Hier steht wie es geht

(Tshark) ------- frames verloren gegangen sind----> (Perl) --------> (MySQL)
dies ist, wie ich, leiten Sie die Ausgabe von tshark Skript:

sudo tshark -i mon0 -t ad -T fields -e frame.time -e frame.len -e frame.cap_len -e radiotap.length | perl tshark-sql-capture.pl 

dies ist einfache template-perl-Skript, das ich benutze (tshark-sql-capture.pl)

# preparing the MySQL
my $dns = "DBI:mysql:capture;localhost";
my $dbh = DBI->connect($dns,user,pass);
my $db = "captured";

while (<STDIN>) {
    chomp($data = <STDIN>);
    ($time, $frame_len, $cap_len, $radiotap_len) = split "  ", $data;
    my $sth = $dbh-> prepare("INSERT INTO $db VALUES (str_to_date('$time','%M %d, %Y %H:%i:%s.%f'), '$frame_len', '$cap_len', '$radiotap_len'\n)" );
    $sth->execute;
}

#Terminate MySQL
$dbh->disconnect;

Jede Idee, die helfen können, um die Leistung besser gewürdigt wird.Oder vielleicht gibt es einen Alternativen Mechanismus, der es besser kann.
Jetzt meine Leistung ist 50% bedeutet, ich kann speichern in mysql etwa die Hälfte der Pakete, die ich ' V erfasst.

Deaktivieren Sie alle Tasten, die Sie haben auf der capture-Tabelle. Jedes einzelne update verursachen wird der Schlüssel aktualisiert werden, das kann ein großer Verlangsamung, wenn Sie eine insert-Sturm. Schalten Sie Schlüssel, dann neu erstellen/aktivieren Sie den index, nachdem Sie fertig sind das einfügen.

InformationsquelleAutor hra | 2011-09-13

Schreibe einen Kommentar