ntunnel_mysql_Navicat 使用HTTP代理连接mysql ntunnel_mysql.php

本文介绍如何使用ntunnel_mysql和mysqli代理,通过PHP脚本来实现Navicat通过HTTP代理连接到MySQL数据库。代码中包含用户验证、数据传输和错误处理等功能。
摘要由CSDN通过智能技术生成

/// zjfree 使用mysqli代理Navicat

const USER_ACCOUNT = 'admin';const USER_PASSWORD = '111111';//检测用户授权

functioncheck()

{if (!isset($_SERVER['PHP_AUTH_USER'])) {header('WWW-Authenticate: Basic realm="My Realm"');header('HTTP/1.0 401 Unauthorized');//echo 'Text to send if user hits Cancel button';

exit;

}if (!($_SERVER['PHP_AUTH_USER'] == USER_ACCOUNT && $_SERVER['PHP_AUTH_PW'] ==USER_PASSWORD)) {exit;

}

}

check();//set allowTestMenu to false to disable System/Server test page

$allowTestMenu = true;$use_mysqli = function_exists("mysqli_connect");header("Content-Type: text/plain; charset=x-user-defined");error_reporting(0);set_time_limit(0);functionphpversion_int()

{list($maVer, $miVer, $edVer) = preg_split("(/|\.|-)", phpversion());return $maVer * 10000 + $miVer * 100 + $edVer;

}if (phpversion_int() < 50300) {set_magic_quotes_runtime(0);

}function GetLongBinary($num)

{return pack("N", $num);

}function GetShortBinary($num)

{return pack("n", $num);

}function GetDummy($count)

{$str = "";for ($i = 0; $i < $count; $i++)$str .= "\x00";return $str;

}function GetBlock($val)

{$len = strlen($val);if ($len < 254)return chr($len) . $val;else

return "\xFE" . GetLongBinary($len) . $val;

}function EchoHeader($errno)

{$str = GetLongBinary(1111);$str .= GetShortBinary(202);$str .= GetLongBinary($errno);$str .= GetDummy(6);echo $str;

}function EchoConnInfo($conn)

{if ($GLOBALS['use_mysqli']) {$str = GetBlock(mysqli_get_host_info($conn));$str .= GetBlock(mysqli_get_proto_info($conn));$str .= GetBlock(mysqli_get_server_info($conn));echo $str;

}else{$str = GetBlock(mysql_get_host_info($conn));$str .= GetBlock(mysql_get_proto_info($conn));$str .= GetBlock(mysql_get_server_info($conn));echo $str;

}

}function EchoResultSetHeader($errno, $affectrows, $insertid, $numfields, $numrows)

{$str = GetLongBinary($errno);$str .= GetLongBinary($affectrows);$str .= GetLongBinary($insertid);$str .= GetLongBinary($numfields);$str .= GetLongBinary($numrows);$str .= GetDummy(12);echo $str;

}function EchoFieldsHeader($res, $numfields)

{$str = "";for ($i = 0; $i < $numfields; $i++) {if ($GLOBALS['use_mysqli']) {$finfo = mysqli_fetch_field_direct($res, $i);$str .= GetBlock($finfo->name);$str .= GetBlock($finfo->table);$type = $finfo->type;$length = $finfo->length;$str .= GetLongBinary($type);$intflag = $finfo->flags;$str .= GetLongBinary($intflag);$str .= GetLongBinary($length);

}else{$str .= GetBlock(mysql_field_name($res, $i));$str .= GetBlock(mysql_field_table($res, $i));$type = mysql_field_type($res, $i);$length = mysql_field_len($res, $i);switch ($type) {case "int":

if ($length > 11) $type = 8;else $type = 3;break;case "real":

if ($length == 12) $type = 4;elseif ($length == 22) $type = 5;else $type = 0;break;case "null":

$type = 6;break;case "timestamp":

$type = 7;break;case "date":

$type = 10;break;case "time":

$type = 11;break;case "datetime":

$type = 12;break;case "year":

$type = 13;break;case "blob":

if ($length > 16777215) $type = 251;elseif ($length > 65535) $type = 250;elseif ($length > 255) $type = 252;else $type = 249;break;default:

$type = 253;

}$str .= GetLongBinary($type);$flags = explode(" ", mysql_field_flags($res, $i));$intflag = 0;if (in_array("not_null", $flags)) $intflag += 1;if (in_array("primary_key", $flags)) $intflag += 2;if (in_array("unique_key", $flags)) $intflag += 4;if (in_array("multiple_key", $flags)) $intflag += 8;if (in_array("blob", $flags)) $intflag += 16;if (in_array("unsigned", $flags)) $intflag += 32;if (in_array("zerofill", $flags)) $intflag += 64;if (in_array("binary", $flags)) $intflag += 128;if (in_array("enum", $flags)) $intflag += 256;if (in_array("auto_increment", $flags)) $intflag += 512;if (in_array("timestamp", $flags)) $intflag += 1024;if (in_array("set", $flags)) $intflag += 2048;$str .= GetLongBinary($intflag);$str .= GetLongBinary($length);

}

}echo $str;

}function EchoData($res, $numfields, $numrows)

{for ($i = 0; $i < $numrows; $i++) {$str = "";$row = null;if ($GLOBALS['use_mysqli'])$row = mysqli_fetch_row($res);else

$row = mysql_fetch_row($res);for ($j = 0; $j < $numfields; $j++) {if (is_null($row[$j]))$str .= "\xFF";else

$str .= GetBlock($row[$j]);

}echo $str;

}

}functiondoSystemTest()

{function output($description, $succ, $resStr)

{echo "

$description$resStr[0]" : "class=\"TestFail\">$resStr[1]";

}

output("PHP version >= 4.0.5", phpversion_int() >= 40005, array("Yes", "No"));

output("mysql_connect() available", function_exists("mysql_connect"), array("Yes", "No"));

output("mysqli_connect() available", function_exists("mysqli_connect"), array("Yes", "No"));if (phpversion_int() >= 40302 && substr($_SERVER["SERVER_SOFTWARE"], 0, 6) == "Apache" && function_exists("apache_get_modules")) {if (in_array("mod_security2", apache_get_modules()))

output("Mod Security 2 installed", false, array("No", "Yes"));

}

}/

if (phpversion_int() < 40005) {

EchoHeader(201);echo GetBlock("unsupported php version");exit();

}if (phpversion_int() < 40010) {global $HTTP_POST_VARS;$_POST = &$HTTP_POST_VARS;

}if (!isset($_POST["actn"]) || !isset($_POST["host"]) || !isset($_POST["port"]) || !isset($_POST["login"])) {$testMenu = $allowTestMenu;if (!$testMenu) {

EchoHeader(202);echo GetBlock("invalid parameters");exit();

}

}if (!$testMenu) {if ($_POST["encodeBase64"] == '1') {for ($i = 0; $i < count($_POST["q"]); $i++)$_POST["q"][$i] = base64_decode($_POST["q"][$i]);

}if (!function_exists("mysql_connect") && !function_exists("mysqli_connect")) {

EchoHeader(203);echo GetBlock("MySQL not supported on the server");exit();

}$errno_c = 0;$hs = $_POST["host"];if ($use_mysqli) {if ($_POST["port"])$conn = mysqli_connect($hs, $_POST["login"], $_POST["password"], '', $_POST["port"]);else

$conn = mysqli_connect($hs, $_POST["login"], $_POST["password"]);$errno_c = mysqli_connect_errno($conn);if (phpversion_int() >= 50005) { //for unicode database name

mysqli_set_charset($conn, 'UTF8');

}if ($errno_c > 0) {

EchoHeader($errno_c);echo GetBlock(mysqli_connect_error($conn));exit;

}if (($errno_c <= 0) && ($_POST["db"] != "")) {$res = mysqli_select_db($conn, $_POST["db"]);$errno_c = mysqli_errno($conn);

}

EchoHeader($errno_c);if ($errno_c > 0) {echo GetBlock(mysqli_error($conn));

}elseif ($_POST["actn"] == "C") {

EchoConnInfo($conn);

}elseif ($_POST["actn"] == "Q") {for ($i = 0; $i < count($_POST["q"]); $i++) {$query = $_POST["q"][$i];if ($query == "") continue;if (phpversion_int() < 50400) {if (get_magic_quotes_gpc())$query = stripslashes($query);

}$res = mysqli_query($conn, $query);$errno = mysqli_errno($conn);$affectedrows = mysqli_affected_rows($conn);$insertid = mysqli_insert_id($conn);if (false !== $res) {$numfields = mysqli_field_count($conn);$numrows = mysqli_num_rows($res);

}else{$numfields = 0;$numrows = 0;

}

EchoResultSetHeader($errno, $affectedrows, $insertid, $numfields, $numrows);if ($errno > 0)echo GetBlock(mysqli_error($conn));else{if ($numfields > 0) {

EchoFieldsHeader($res, $numfields);

EchoData($res, $numfields, $numrows);

}else{if (phpversion_int() >= 40300)echo GetBlock(mysqli_info($conn));else

echo GetBlock("");

}

}if ($i < (count($_POST["q"]) - 1))echo "\x01";else

echo "\x00";if (false !== $res)mysqli_free_result($res);

}

}

}else{if ($_POST["port"]) $hs .= ":" . $_POST["port"];$conn = mysql_connect($hs, $_POST["login"], $_POST["password"]);$errno_c = mysql_errno();if (phpversion_int() >= 50203) { //for unicode database name

mysql_set_charset('UTF8', $conn);

}if (($errno_c <= 0) && ($_POST["db"] != "")) {$res = mysql_select_db($_POST["db"], $conn);$errno_c = mysql_errno();

}

EchoHeader($errno_c);if ($errno_c > 0) {echo GetBlock(mysql_error());

}elseif ($_POST["actn"] == "C") {

EchoConnInfo($conn);

}elseif ($_POST["actn"] == "Q") {for ($i = 0; $i < count($_POST["q"]); $i++) {$query = $_POST["q"][$i];if ($query == "") continue;if (phpversion_int() < 50400) {if (get_magic_quotes_gpc())$query = stripslashes($query);

}$res = mysql_query($query, $conn);$errno = mysql_errno();$affectedrows = mysql_affected_rows($conn);$insertid = mysql_insert_id($conn);$numfields = mysql_num_fields($res);$numrows = mysql_num_rows($res);

EchoResultSetHeader($errno, $affectedrows, $insertid, $numfields, $numrows);if ($errno > 0)echo GetBlock(mysql_error());else{if ($numfields > 0) {

EchoFieldsHeader($res, $numfields);

EchoData($res, $numfields, $numrows);

}else{if (phpversion_int() >= 40300)echo GetBlock(mysql_info($conn));else

echo GetBlock("");

}

}if ($i < (count($_POST["q"]) - 1))echo "\x01";else

echo "\x00";mysql_free_result($res);

}

}

}exit();

}header("Content-Type: text/html");/

?>

Navicat HTTP Tunnel Tester

margin:30px;

font-family:Tahoma;

font-weight:normal;

font-size:14px;

color: #222222;

}

table {

width: 100%;

border:0px;

}

input {

font-family: Tahoma, sans-serif;

border-style:solid;

border-color: #666666;

border-width:1px;

}

fieldset {

border-style:solid;

border-color: #666666;

border-width:1px;

}.Title1 {

font-size:30px;

color: #003366;

}.Title2 {

font-size:10px;

color: #999966;

}.TestDesc {

width: 70%}.TestSucc {

color: #00BB00;

}.TestFail {

color: #DD0000;

}.mysql{}.pgsql {

display:none;

}.sqlite {

display:none;

}#page {

max-width:42em;min-width:36em;

border-width:0px;

margin:auto auto;

}#host,

#dbfile {

width:300px;

}#port {

width:75px;

}#login,

#password,

#db {

width:150px;

}#Copyright {

text-align:right;

font-size:10px;

color: #888888;

}

functiongetInternetExplorerVersion() {var ver = -1;if (navigator.appName == "Microsoft Internet Explorer") {var regex = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");if (regex.exec(navigator.userAgent))

ver= parseFloat(RegExp.$1);

}returnver;

}function setText(element, text,succ) {

element.className = (succ) ? "TestSucc" : "TestFail";

element.innerHTML =text;

}function getByteAt(str,offset) {return str.charCodeAt(offset) & 0xff;

}function getIntAt(binStr,offset) {return (getByteAt(binStr, offset) << 24) +(getByteAt(binStr, offset + 1) << 16) +(getByteAt(binStr, offset + 2) << 8) +(getByteAt(binStr, offset + 3) >>> 0);

}function getBlockStr(binStr,offset) {if (getByteAt(binStr, offset) < 254)return binStr.substring(offset + 1, offset + 1 + binStr.charCodeAt(offset));else

return binStr.substring(offset + 5, offset + 5 + getIntAt(binStr, offset + 1));

}functiondoServerTest() {var version =getInternetExplorerVersion();if (version == -1 || version >= 9.0) {var xmlhttp = (window.XMLHttpRequest) ? new XMLHttpRequest() : xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

xmlhttp.onreadystatechange = function() {var outputDiv = document.getElementById("ServerTest");if (xmlhttp.readyState == 4) {if (xmlhttp.status == 200) {var errno = getIntAt(xmlhttp.responseText, 6);if (errno == 0)

setText(outputDiv, "Connection Success!", true);elsesetText(outputDiv, parseInt(errno) + " - " + getBlockStr(xmlhttp.responseText, 16), false);

}elsesetText(outputDiv, "HTTP Error - " + xmlhttp.status, false);

}

}var params = "";var form = document.getElementById("TestServerForm");for (var i = 0; i < form.elements.length; i++) {if (i > 0) params += "&";

params+= form.elements[i].id + "=" + form.elements[i].value.replace("&", "%26");

}

document.getElementById("ServerTest").className = "";

document.getElementById("ServerTest").innerHTML = "Connecting...";

xmlhttp.open("POST", "", true);

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xmlhttp.setRequestHeader("Content-length", params.length);

xmlhttp.setRequestHeader("Connection", "close");

xmlhttp.send(params);

}else{

document.getElementById("ServerTest").className = "";

document.getElementById("ServerTest").innerHTML = "Internet Explorer " + version + " is not supported, please use Internet explorer 9.0 or above, firefox, chrome or safari";

}

}

Navicat™

The gateway to your database!

System Environment Test

PHP installed properlyNo

Server Test

Hostname/IP Address:
Port:
Initial Database:
Username:
Password:
Database File:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值