【问题标题】:How do I get the client's IP address from within a Perl Frontier-RPC call?如何从 Perl Frontier-RPC 调用中获取客户端的 IP 地址?
【发布时间】:2009-01-21 04:47:12
【问题描述】:

我正试图让我的 Perl Frontier XML-RPC 守护程序知道调用者的 IP 地址。我不得不说我是 Perl 的新手,所以也许这很明显。我知道Frontier::Daemon 继承自IO::Socket::INET,它有一个peeraddr() 方法,但是当守护进程没有将自己的实例传递给XML-RPC 方法调用时,这对我没有帮助。

我的代码大致如下:

    my $server = Frontier::Daemon->new(
        methods => {
                diff => \&diff,
        },
        LocalPort => 8080,
        ReuseAddr => 1,
    );

然后在下面:

sub diff {
    return $_[0] - $_[1];
}

如何从 'diff' 中获取调用者的 IP 地址?

【问题讨论】:

    标签: perl xml-rpc


    【解决方案1】:

    很遗憾,您不能使用 Frontier 的服务器类来执行此操作。到调用本地过程/方法时,您对实际的套接字连接本身没有任何句柄。

    碰巧的是,能够访问这些信息是我最近添加到我的RPC::XML 包中的服务器类的一项功能。请参阅服务器类文档中的“How Methods Are Called”部分。

    【讨论】:

      【解决方案2】:

      我同时运行 Frontier::Daemon 和 Frontier::RPC2(在 Apache 下)。我不知道在使用 Frontier::Daemon 时如何获取客户端 IP,但如果使用 Frontier::RPC2 则 Apache 环境变量 $ENV{REMOTE_ADDR} 将包含客户端的 IP 地址。

      【讨论】:

        猜你喜欢
        • 2015-07-27
        • 2012-03-14
        • 2012-02-16
        • 2012-06-06
        • 1970-01-01
        • 2015-12-20
        • 2016-03-29
        • 2019-01-14
        • 2019-11-13
        相关资源
        最近更新 更多