0

我有一个作业在包含两个程序的 Perl 类中,第一个是使用 DBI::SQLite for Perl 创建一个数据库和表,我已经完成了程序的第一部分,但我不知道该怎么做关于做第二部分。第二部分涉及从日志文件中获取源 IP 和目标端口对,并使用 SQL 插入语句将它们插入到表中。在第一个程序中创建的表包含两列,一列用于源 IP,另一列用于目标端口,程序不应该产生任何输出,除了添加到表中的行数。正如您在下面看到的,我放置的代码代表了表格的设置方式,我非常感谢您在学习如何填写表格方面提供一些帮助。第二个程序所需的日志文件可用@此链接: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

第二个程序的代码(未解决)

#!/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

逐行阅读文件(网上有几十个例子)。

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 回答