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

Want to send UDP packet over IPv6 link local IP in Perl

我编写了一个脚本来通过 IPv6 link 本地 IP 发送 UDP 数据包。 源和目标都是 IPv6 link 本地 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

任何人都请帮助我。

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

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

您也不希望使用 Socket6IO::Socket::INET6,因为它们都是非常古老的 "transition" 在 IPv6 中很早就编写的东西,早于核心 Socket 本机支持 'v6。现在它很好,你应该坚持常规 SocketIO::Socket::IP.

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