希望在Perl中通过IPv6链路本地IP发送UDP数据包
我编写了一个脚本,通过IPv6链接本地IP发送UDP数据包。 源和目标都是IPv6链路本地IP希望在Perl中通过IPv6链路本地IP发送UDP数据包,perl,sockets,ipv6,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 =
#!/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();
任何人都可以在这方面帮助我。我感觉这是失败的,因为您使用的是本地链接,但不要在
LocalAddr
字符串中指定接口。以下几点似乎对我有用:
LocalAddr => "fe80::a00:27ff:fe49:51ce%eth0",
PeerAddr => "fe80::a00:27ff:fe49:51ce",
PeerPort => 22,
Proto => 'tcp',
您也不想使用
Socket6
或IO::Socket::INET6
,因为它们都是非常古老的“过渡”内容,早在IPv6中就编写了,而不是在core的Socket
本机支持的“v6”之前。现在它做得很好,您应该坚持使用常规的Socket
和IO::Socket::IP
(通过免责声明:我是两者的维护者)我在文档中没有看到任何与此相关的内容,但如果其他人能够确认此行为,我将很高兴为文档编写补丁。因为所有接口上的链接本地网络都使用相同的网络(fe80::/10),所以在使用链接本地地址时必须指定区域(接口)。如果您有多个接口,每个接口都将使用链接本地网络,因此操作系统必须确定使用哪个接口的唯一方法是在地址末尾指定区域。不同的操作系统具有不同的区域标识符(%eth0、%2等)。您是否以root用户身份运行此操作系统?否则,您应该选择1024以上的值。
LocalAddr => "fe80::a00:27ff:fe49:51ce%eth0",
PeerAddr => "fe80::a00:27ff:fe49:51ce",
PeerPort => 22,
Proto => 'tcp',