Perl 5.10.1 を使用して Linux ボックス (Centos 6) で特定のポートにアクセスしようとしているかどうかを監視する小さなスクリプトを作成しています。ピアホスト リクエストに対して空白のエントリが返されます。理由はわかりません。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";
}
}
注 - このスクリプトが終了しないのは意図的なものです。最終的にはこれを init スクリプトでラップし、サービスとして実行します。