gpt4 book ai didi

mysql - 如何抓取网络包到MySQL

转载 作者:行者123 更新时间:2023-11-29 03:11:36 26 4
gpt4 key购买 nike

我要为 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 中存储我捕获的大约一半的数据包。

最佳答案

写在管道中的东西不会丢失,可能真正发生的是 tshark 试图写入管道但是 perl+mysql 处理输入的速度太慢所以管道已满,写入会阻塞所以 tshark只是丢弃数据包。

瓶颈可能是 MySQL 或 Perl 本身,但也可能是数据库。检查 CPU 使用率,测量插入率。然后选择一个更快的数据库或写入多个数据库。您还可以尝试批量插入并增加管道缓冲区的大小。

更新

while (<STDIN>)

这会将一行读入 $_,然后您忽略它。

关于mysql - 如何抓取网络包到MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7407070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com