0

私は、2 つのプログラムを含む私の Perl クラスで課題を持っています。1 つ目は、Perl 用の DBI::SQLite を使用してデータベースとテーブルを作成することです。プログラムの最初の部分は既に完了していますが、どのように進めればよいかわかりません。第二部をやることについて。2 番目の部分では、ログ ファイルから送信元 IP と宛先ポートのペアを取得し、SQL 挿入ステートメントを使用してそれらをテーブルに挿入します。最初のプログラムで作成されたテーブルには、送信元 IP 用と宛先ポート用の 2 つの列が含まれています。このプログラムは、テーブルに追加された行数以外の出力を生成するべきではありません。以下のコードは、テーブルがどのように設定されたかを表していることがわかります。テーブルを埋める方法を学ぶための助けをいただければ幸いです。2 番目のプログラムに必要なログ ファイルは、次のリンクから入手できます。http://fleming0.flemingc.on.ca/~chbaker/COMP234-Perl/sample.log

私の最初のプログラムのコード

#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my $dbh = DBI->connect(          
    "dbi:SQLite:dbname=test.db", 
    "",
    "",
    { RaiseError => 1}
) or die $DBI::errstr;
$dbh->do(<<'END_SQL');
CREATE TABLE probes (
    source CHAR(15) NOT NULL,
    port CHAR(5) NOT NULL,
    PRIMARY KEY (source, port) )
END_SQL

2 番目のプログラムのコード (うまくいかない)

#!/usr/bin/perl

use strict;
use warnings;
use DBI;

my %ip2port;
my $IPCount = keys %ip2port;
my $portCount = 0;
my $filename = "./sample.log";
open my $LOG, "<", $filename or die "Can't open $filename: $!";
LINE: while (my $line = <$LOG>) {
my ($src_id) = $line =~ m!SRC=([.\d]+)!gis; my ($dst_port) = $line =~ m!DPT=([.\d]+)!gis;
my $dbh = DBI->connect(          
    "dbi:SQLite:dbname=test.db", 
    "",                          
    "",                          
    { RaiseError => 1 },         
) or die $DBI::errstr;


$dbh->do("INSERT INTO probes VALUES($src_id, $dst_port )");
$dbh->do("INSERT INTO probes VALUES(2,'$dst_port',57127)");
my $sth = $dbh->prepare("SELECT SQLITE_VERSION()");
$sth->execute();

my $ver = $sth->fetch();

print @$ver;
print "\n";

$sth->finish();
$dbh->disconnect();
}
4

1 に答える 1

0

ファイルを 1 行ずつ読み取ります (ネットにある数十の例)。

my ($src_id) = $line =~ m!SRC=([\.\d]+)!gis;
my ($dst_port) = $line =~ m!DPT=([\.\d]+)!gis;

次に、このデータをデータベースに挿入します。(ネットには数十の例があります)。

いくつかの読書: http://www.perl.com/pub/199​​9/10/DBI.html

于 2013-04-05T08:24:53.847 に答える