Я собираюсь спроектировать сетевой анализатор для WiFi (802.11). В настоящее время я использую tshark для захвата и разбора кадров WiFi, а затем передаю выходные данные скрипту perl для сохранения проанализированной информации в базе данных Mysql.
Я просто обнаружил, что в этом процессе я пропускаю много кадров.Я проверил, и кадры, кажется, теряются во время конвейера (когда выходные данные доставляются в perl для получения данных в Mysql). Вот как это происходит
(Tshark) ------- кадры теряются----> (Perl) --------> (MySQL) это то, как я передаю вывод tshark в скрипт:
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
это простой шаблон скрипта perlЯ использую (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;
Любая идея, которая может помочь улучшить производительность, ценится. Или, может быть, существует альтернативный механизм, который может работать лучше.Сейчас моя производительность составляет 50%, что означает, что я могу хранить в mysql около половины пакетов, которые я перехватил.