我正在尝试使用perl模拟rpcinfo -T udp -p $HOST
。
似乎我需要将一些数据包发送到端口111,但我找不到RFC 1833的实际数据报。https://www.rfc-editor.org/rfc/rfc1833.txt
我还找到了一个标有rpcinfo.pl
(https://stuff.mit.edu/afs/sipb/project/eichin/common/perl/nem/rpcinfo.pl)的脚本,并将数据报部分复制到我的脚本中,但没有运气。
我的问题是:[1]我在哪里可以找到rpcinfo规范? [2]我的以下脚本出了什么问题?
感谢。
use strict;
use warnings;
use Carp;
use IO::Socket::INET;
use Data::Dumper;
my $remote_addr = $ARGV[0];
my $sock = IO::Socket::INET->new(
Proto => 'udp',
PeerHost => $remote_addr,
PeerPort => 111,
) or croak $@;
my $trx = int rand 10_000;
my $msg = pack(
"N13",
$trx, # transaction
0, # call
2, # RPC version
100000, # portmap program number
2, # version number
4, # procedure number
);
$sock->send($msg) or croak "send() failed: $!\n";
my $resp = eval {
local $SIG{ALRM} = sub { croak "Timed out"; };
my $data;
alarm 3;
$sock->recv($data, 960) or croak "recv() failed: $!";
alarm 0;
return $data;
} || ();
print Dumper $resp;
1;