[英]How can I capture incoming UDP traffic using IO::Socket in Perl?
我正在尝试监听并持续获取端口 162 上的传入 UDP 流量,如下所示,但是,我们似乎从未进入 while 循环。
通过端口 162 上的 tcpdump 可以看到流量,下面的 Perl 代码以 root 身份运行。 脚本似乎在等待和倾听,但从来没有任何 output。
肯定缺少一个关键位。 有任何想法吗?
use IO::Socket::INET;
# flush after every write
$| = 1;
my $received;
my ($peeraddress, $peerport);
my $socket = new IO::Socket::INET(
LocalAddr => 'localhost',
LocalPort => '162',
Proto => 'udp',
Type => SOCK_DGRAM,
) or die "ERROR in Socket Creation : $@\n";
while ( $socket->recv($received, 1024) ) {
$peeraddress = $socket->peerhost();
$peerport = $socket->peerport();
print "\n($peeraddress , $peerport) said : $received";
}
$socket->close();
编辑:当“localhost”被“0.0.0.0”替换时,上面的代码有效,请参阅@ikegami 的回答。 如评论中所述,由于系统防火墙,还存在流量无法到达的问题。
您正在收听 127.0.0.1:162,但流量将流向另一个适配器。
假设您在 NAT 路由器后面并且您的 inte.net 流量转到 192.168.1.2。 您需要收听 192.168.1.2:162 而不是 127.0.0.1:162。
或者,您可以收听 0.0.0.0:162。 特殊地址 0.0.0.0 表示您想要监听所有适配器,因此在我们的示例中为 127.0.0.1 和 192.168.1.2。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.