我的一点点代码有困难。
open ("files","$list");
while (my $sort = <files>) {
chomp $sort;
foreach my $key (sort keys %ips) {
if ($key =~ $sort) {
print "key $key\n";
my $match =qx(iptables -nL | grep $key 2>&1);
print "Match Results $match\n";
chomp $match;
my $banned = $1 if $match =~ (/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/);
print "Banned Results $banned\n";
if ($key =~ $banned) {
print "Already banned $banned\n";
} else {
system ("iptables -A INPUT -s $key -j DROP");
open my $fh, '>>', 'banned.out';
print "Match Found we need to block it $key\n";
print $fh "$key:$timestamp\n";
close $fh;
}
}
}
}
所以基本上我正在做的是每行打开一个地址列表 1。
接下来,我从脚本的另一部分对关键变量进行排序,并将其与我的列表匹配,如果匹配,则继续执行 if 语句。
现在使用匹配的密钥,我需要检查它是否已经被阻止,所以我使用 qx 来执行 iptables 和 grep 来获取该变量。如果它匹配一切都会完美运行。
如果它不匹配,换句话说,我iptables -nL | grep $key
返回一个空白值,而不是继续我的 else 语句,它“抓住” $match 的空白值并继续执行。
对于我的生活,我无法弄清楚如何去除那个空白值并基本上将其显示为没有回报。
我知道有用于 iptables 等的模块,但是我必须使这个脚本尽可能通用。