The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Net::EPP::MITMProxy - A generic EPP proxy server framework.

VERSION

version 0.02

SYNOPSIS

    package My::Proxy::Server;
    use base qw(Net::EPP::MITMProxy);

    sub rewrite_command {
        my ($self, $xml) = @_;

        # do something to $xml here

        return $xml;
    }

    #
    # note: $command_xml contains the original unmodified command from the
    # client, not the rewritten command
    #
    sub rewrite_response {
        my ($self, $response_xml, $command_xml) = @_;

        # do something to $response_xml here

        return $response_xml;
    }

    __PACKAGE__->new->run(%OPTIONS);

INTRODUCTION

This module implements an EPP proxy server that acts as a machine-in-the-middle between client and server, and allows EPP command and response frames to be modified in-flight.

OPTIONS

This module inherits from Net::Server::Prefork and so supports all of that module's options, in addition to the following:

  • remote_server - the remote EPP server name.

  • remote_port - the remote EPP server port (default 700).

  • remote_key - (OPTIONAL) the private key to use to connect to the remote server.

  • remote_cert - (OPTIONAL) the certificate to use to connect to the remote server.

Note that a limitation of the current approach is that it is not possible to connect to the remote server using a client certificate determined by the identity of the client.

REWRITING COMMANDS

To rewrite EPP commands before they're sent to the remote server, you must implement your own rewrite_command() method.

    sub rewrite_command {
        my ($self, $xml) = @_;

        # do something to $xml here

        return $xml;
    }

The rewrite_command() method is passed a scalar containing the XML received from the client, and should return the modified command XML.

REWRITING RESPONSES

To rewrite EPP commands before they're sent to the remote server, you must implement your own rewrite_response() method.

    sub rewrite_response {
        my ($self, $response_xml, $command_xml) = @_;

        # do something to $response_xml here

        return $response_xml;
    }

The rewrite_response() method is passed both the original command XML from the client, and the response XML from the remote server, and should return the modified response XML.

AUTHOR

Gavin Brown <gavin.brown@icann.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2024 by Internet Corporation for Assigned Names and Numbers (ICANN).

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.