электронная почта — php MX Query — разные результаты

У меня есть старая коробка php4, которую я пытаюсь использовать.
У меня нет nslookup, php getmxrr и т. Д.

На сайте php.net я обнаружил функцию, которая возвращает записи MX для домена. В этом примере я использую gmail, но я получаю другие результаты по сравнению с getmxrr ().

getmxrr показывает:

Array
(
[0] => alt1.gmail-smtp-in.l.google.com
[1] => alt3.gmail-smtp-in.l.google.com
[2] => alt2.gmail-smtp-in.l.google.com
[3] => gmail-smtp-in.l.google.com
[4] => alt4.gmail-smtp-in.l.google.com
)

пока эта функция возвращает:

Array
(
[0] => google.com
[1] => alt3.google.com
[2] => alt4.google.com
[3] => alt2.google.com
[4] => alt2.google.com.google.com
)

Приведенный ниже код показывает, как я вызвал getmxrr и функцию, кто-нибудь может посоветовать, можно ли получить результаты, совпадающие с getmxrr ?? Он запрашивает тот же сервер на порту 53.

<?php

getmxrr ( "gmail.com", $mxhosts);

echo "<pre>";
print_r($mxhosts);
echo "</pre>";class mxlookup
{
var $dns_socket = NULL;
var $QNAME = "";
var $dns_packet= NULL;
var $ANCOUNT = 0;
var $cIx = 0;
var $dns_repl_domain;
var $arrMX = array();

function mxlookup($domain, $dns="8.8.8.8")
{
$this->QNAME($domain);
$this->pack_dns_packet();
$dns_socket = fsockopen("udp://$dns", 53);

fwrite($dns_socket,$this->dns_packet,strlen($this->dns_packet));
$this->dns_reply  = fread($dns_socket,1);

$bytes = stream_get_meta_data($dns_socket);
$this->dns_reply .= fread($dns_socket,$bytes['unread_bytes']);
fclose($dns_socket);
$this->cIx=6;
$this->ANCOUNT   = $this->gord(2);
$this->cIx+=4;
$this->parse_data($this->dns_repl_domain);
$this->cIx+=7;

for($ic=1;$ic<=$this->ANCOUNT;$ic++)
{
$QTYPE = ord($this->gdi($this->cIx));
if($QTYPE!==15){print("[MX Record not returned]"); die();}
$this->cIx+=9;
$mxPref = ord($this->gdi($this->cIx));
$this->parse_data($curmx);
$this->arrMX[] = $curmx;
$this->cIx+=3;
}
}

function parse_data(&$retval)
{
$arName = array();
$byte = ord($this->gdi($this->cIx));
while($byte!==0)
{
if($byte==192) //compressed
{
$tmpIx = $this->cIx;
$this->cIx = ord($this->gdi($cIx));
$tmpName = $retval;
$this->parse_data($tmpName);
$retval=$retval.".".$tmpName;
$this->cIx = $tmpIx+1;
return;
}
$retval="";
$bCount = $byte;
for($b=0;$b<$bCount;$b++)
{
$retval .= $this->gdi($this->cIx);
}
$arName[]=$retval;
$byte = ord($this->gdi($this->cIx));
}
$retval=join(".",$arName);
}

function gdi(&$cIx,$bytes=1)
{
$this->cIx++;
return(substr($this->dns_reply, $this->cIx-1, $bytes));
}

function QNAME($domain)
{
$dot_pos = 0; $temp = "";
while($dot_pos=strpos($domain,"."))
{
$temp   = substr($domain,0,$dot_pos);
$domain = substr($domain,$dot_pos+1);
$this->QNAME .= chr(strlen($temp)).$temp;
}
$this->QNAME .= chr(strlen($domain)).$domain.chr(0);
}

function gord($ln=1)
{
$reply="";
for($i=0;$i<$ln;$i++){
$reply.=ord(substr($this->dns_reply,$this->cIx,1));
$this->cIx++;
}

return $reply;
}

function pack_dns_packet()
{
$this->dns_packet = chr(0).chr(1).
chr(1).chr(0).
chr(0).chr(1).
chr(0).chr(0).
chr(0).chr(0).
chr(0).chr(0).
$this->QNAME.
chr(0).chr(15).
chr(0).chr(1);
}

}

/* Exampe of use: */
$mx = new mxlookup("gmail.com");

echo "<pre>";
print_r($mx->arrMX);
echo "</pre>";
?>

Спасибо

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]