我正在编写一个小脚本来监视是否尝试使用 Perl 5.10.1 在我的 Linux 机器(Centos 6)上访问某些端口。我正在为我的 peerhost 请求取回空白条目。我不确定为什么。听起来这可能是 IO 套接字模块(http://snowhare.com/utilities/perldoc2tree/example/IO/Socket.html)中的故障,但我不太确定。任何见解将不胜感激。
编辑:
由于我启用了严格和警告,在我认为它是空白的情况下,我得到了一个“未初始化的值 $display”。
#! /usr/bin/perl
use strict;
use warnings;
use IO::Socket;
use Sys::Syslog qw( :DEFAULT setlogsock);
use threads;
my @threads=();
my @ports=(88,110,389);
main(\@ports);
sub main
{
my $ports=shift;
setlogsock('unix');
openlog($0,'','user');
for my $port (@{$ports} ) {
push @threads, threads->create(\&create_monitor, $port );
}
$_->join foreach @threads;
closelog;
# wait for all threads to finish
}
sub create_monitor{
my $LocalPort=shift;
my $sock = new IO::Socket::INET (
LocalPort => $LocalPort,
Proto => 'tcp',
Listen => 1,
Reuse => 1,
) or die "Could not create socket: $!\n";
while(1)
{
my $peer_connection= $sock->accept;
my $display = $peer_connection->peerhost();
my $message="Connection attempt on port $LocalPort from $display";
#syslog('info', $message);
print $message."\n";
}
}
注意 - 这个脚本永远不会完成是故意的。我最终会用一个初始化脚本来包装它,让它作为服务运行。