WiFi (802.11) 用のネットワーク アナライザーを設計する予定です。現在、tshark を使用して WiFi フレームをキャプチャして解析し、出力を perl スクリプトにパイプして、解析された情報を Mysql データベースに保存します。
このプロセスで多くのフレームを見逃していることがわかりました。確認したところ、パイプ中にフレームが失われているようです (出力が Perl に配信されて Mysql で処理されるとき)。
(Tshark) -------frames are lost----> (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 に保存できることを意味します。