1

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 アドレスを取得するにはどうすればよいですか?

4

2 に答える 2

1

残念ながら、Frontier のサーバー クラスを使用してこれを行うことはできません。ローカル プロシージャ/メソッドが呼び出されるまでには、実際のソケット接続自体のハンドルはありません。

たまたま、この情報にアクセスできる機能は、RPC::XMLパッケージのサーバー クラスに追加した最近の機能です。サーバー クラスのドキュメントの「メソッドの呼び出し方法」セクションを参照してください。

于 2009-01-21T21:07:57.267 に答える
0

Frontier::Daemon と Frontier::RPC2 (Apache の下) の両方を実行しています。Frontier::Daemon を使用する場合にクライアント IP を取得する方法がわかりませんが、Frontier::RPC2 を使用すると、Apache 環境変数 $ENV{REMOTE_ADDR} にクライアントの IP アドレスが含まれます。

于 2009-01-21T15:30:29.740 に答える