⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.133
Server IP:
185.119.109.197
Server:
Linux managedhosting.chostar.me 5.15.0-160-generic #170-Ubuntu SMP Wed Oct 1 10:06:56 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.1.33
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
perl5
/
Mail
/
SPF
/
Mech
/
View File Name :
MX.pm
# # Mail::SPF::Mech::MX # SPF record "mx" mechanism class. # # (C) 2005-2012 Julian Mehnle
# 2005 Shevek
# $Id: MX.pm 57 2012-01-30 08:15:31Z julian $ # ############################################################################## package Mail::SPF::Mech::MX; =head1 NAME Mail::SPF::Mech::MX - SPF record C
mechanism class =cut use warnings; use strict; use base 'Mail::SPF::SenderIPAddrMech'; use constant TRUE => (0 == 0); use constant FALSE => not TRUE; use constant name => 'mx'; use constant name_pattern => qr/${\name}/i; =head1 DESCRIPTION An object of class B
represents an SPF record mechanism of type C
. =head2 Constructors The following constructors are provided: =over =item B
: returns I
Creates a new SPF record C
mechanism object. %options is a list of key/value pairs representing any of the following options: =over =item B
=item B
=item B
=item B
See L
. =back =item B
: returns I
; throws I
, I
Creates a new SPF record C
mechanism object by parsing the string and any options given. =back =head2 Class methods The following class methods are provided: =over =item B
=item B
=item B
=item B
See L
. =item B
: returns I
Returns B<'mx'>. =item B
: returns I
Returns a regular expression that matches a mechanism name of B<'mx'>. =back =head2 Instance methods The following instance methods are provided: =over =cut sub parse_params { my ($self) = @_; $self->parse_domain_spec(); $self->parse_ipv4_ipv6_prefix_lengths(); return; } =item B
=item B
=item B
=cut sub params { my ($self) = @_; my $params; $params .= ':' . $self->{domain_spec} if defined($self->{domain_spec}); $params .= '/' . $self->{ipv4_prefix_length} if defined($self->{ipv4_prefix_length}) and $self->{ipv4_prefix_length} != $self->default_ipv4_prefix_length; $params .= '//' . $self->{ipv6_prefix_length} if defined($self->{ipv6_prefix_length}) and $self->{ipv6_prefix_length} != $self->default_ipv6_prefix_length; return $params; } =item B
=item B
=item B
See L
. =item B
: returns I
Returns the C
parameter of the mechanism. =item B
: returns I
Returns the IPv4 network prefix length of the mechanism. =item B
: returns I
Returns the IPv6 network prefix length of the mechanism. =cut # Make read-only accessors: __PACKAGE__->make_accessor($_, TRUE) foreach qw(domain_spec ipv4_prefix_length ipv6_prefix_length); =item B
: returns I
Checks whether any MX hosts of the mechanism's target domain name (that is, any of the host addresses of its DNS C
records) matches the given request's IP address (see L
), and returns B
if it does, or B
otherwise. The mechanism's IP network prefix lengths are respected when matching address records against the request's IP address. See RFC 4408, 5 and 5.4, for the exact algorithm used. =cut sub match { my ($self, $server, $request) = @_; $server->count_dns_interactive_term($request); my $target_domain = $self->domain($server, $request); my $mx_packet = $server->dns_lookup($target_domain, 'MX'); my @mx_rrs = $mx_packet->answer or $server->count_void_dns_lookup($request); # Respect the MX mechanism lookups limit (RFC 4408, 5.4/3/4): @mx_rrs = splice(@mx_rrs, 0, $server->max_name_lookups_per_mx_mech) if defined($server->max_name_lookups_per_mx_mech); # TODO Use A records from packet's "additional" section? Probably not. # Check MX records: foreach my $rr (@mx_rrs) { if ($rr->type eq 'MX') { return TRUE if $self->match_in_domain($server, $request, $rr->exchange); } else { # Unexpected RR type. # TODO Generate debug info or ignore silently. } } return FALSE; } =back =head1 SEE ALSO L
, L
, L
, L
L
For availability, support, and license information, see the README file included with Mail::SPF. =head1 AUTHORS Julian Mehnle
, Shevek
=cut TRUE;