想在Perl中通过IPv6链路本地IP发送UDP数据包

时间:2015-08-17 13:01:22

标签: perl sockets ipv6

我编写了一个脚本,通过IPv6链路本地IP发送UDP数据包。 源和目标都是IPv6链路本地IP。

#!/usr/bin/perl
use IO::Socket::INET6;
use Socket6;

my ($socket,$data);

$socket = new IO::Socket::INET6(
    LocalAddr   => 'fe80::21b:21ff:fe39:8cce',
    LocalPort   => '547',
    PeerAddr   => 'fe80::240:43ff:feb9:2f44',
    PeerPort   => '546',
    Proto        => 'udp',
) or die "ERROR in Socket Creation : $@\n";

for (my $i=1; $i <= 1; $i++) {
    $data =pack('H*',"123455550");

    $socket->send($data);

}

$socket->close();

执行上述脚本后,我收到以下错误:

ERROR in Socket Creation : IO::Socket::INET6: bind: Invalid argument

任何人请帮助我。

2 个答案:

答案 0 :(得分:0)

我感觉这是失败的,因为您使用的是本地链接,但未在LocalAddr字符串中指定接口。以下似乎对我有用:

LocalAddr  => "fe80::a00:27ff:fe49:51ce%eth0",
PeerAddr   => "fe80::a00:27ff:fe49:51ce",
PeerPort   => 22,
Proto      => 'tcp',

答案 1 :(得分:0)

您也不想使用Socket6IO::Socket::INET6,因为它们都已经过时了#34;过渡&#34;在核心的Socket支持&#v; 6本地之前,在IPv6中很早就写好了。现在它做得很好,你应该坚持常规SocketIO::Socket::IP

(通过免责声明:我是两者的维护者)