我将设计一个用于 WiFi (802.11) 的网络分析器目前我使用 tshark 来捕获和解析 WiFi 帧,然后将输出传递到 perl 脚本以将解析的信息存储到 Mysql 数据库。
我只是发现我在这个过程中错过了很多帧。我检查并在管道期间似乎丢失了帧(当输出被传递到 perl 以在 Mysql 中得到 srored 时)这是怎么回事
(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 中存储我捕获的大约一半的数据包。