使用perl和IO :: Socket :: INET实现rpcinfo命令

时间:2016-08-06 00:45:11

标签: perl

我正在尝试使用perl模拟rpcinfo -T udp -p $HOST

似乎我需要将一些数据包发送到端口111,但我找不到RFC 1833的实际数据报。https://www.rfc-editor.org/rfc/rfc1833.txt

我还找到了一个标有rpcinfo.plhttps://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;

0 个答案:

没有答案