Jump to content
Форум по продукции MOXA

Apache(PHP) + BASH(Curl) и доступ к серверу MySQL... костыли


Recommended Posts

Доброго времени суток!

Тут, как и везде для меня ключевое слово MOXA(IA240Lx/UC-7112Lx-plus) потому и рассматриваю это.

Есть ли возможность осуществлять доступ к базе данных MySQL непосредственно из устройства(указано выше) по локальной сети. Проводил опыты с Apache + php, которые тут в темах этого раздела. Делал скрипт php и получал доступ к базе MySQL через него используя браузер на PC. Но задача стоит в том, что-бы приложение которое крутиться на устройстве само получило доступ к базе в локальной сети. Есть ли варианты реализации этого?

С глубоким уважением!

Заранее спасибо!

 

Link to comment

Первая попытка... а на что PHP? Но он у меня работает только в составе Apache при обработке зпросов, хоть и умеет быть клиентом MySQL. А что (зачем) дома?  То была попытка проверки прокси на доступность по списку. Ну должна же она что-то делать!

На системном блоке с Debian был поднят MySQL сервер, создан пользователь и база. Со стороны UC-7112Lx-plus скрипт PHP:

<?php
	header('Content-Type: text/html; charset=utf-8');
	error_reporting(0);
	//
	$help = "
	<table>
		<tr>
			<td colspan=\"3\" ali align=\"center\" style=\"color: rgb(255,255,255);\">Подсказка к вызываемому скрипту</td>
		</tr>
		<tr>
			<td colspan=\"3\" ali align=\"center\" style=\"color: rgb(255,255,100);\">Для работы с прокси:</td>
		</tr>
		<tr>
			<td style=\"color: rgb(255,100,255);\">cmd=DropProxyListTable</td>
			<td widht=\"5px\"></td>
			<td style=\"color: rgb(255,100,255);\">-Удалить таблицу прокси</td>
		</tr>
		<tr>
			<td style=\"color: rgb(100,255,255);\">cmd=CreateProxyListTable</td>
			<td widht=\"5px\"></td>
			<td style=\"color: rgb(100,255,255);\">-Создать таблицу прокси</td>
		</tr>
		<tr>
			<td style=\"color: rgb(255,100,255);\">cmd=WrProxyUrl&Url=<значение></td>
			<td widht=\"5px\"></td>
			<td style=\"color: rgb(255,100,255);\">-Добавить новый URL прокси в таблицу</td>
		</tr>
		<tr>
			<td style=\"color: rgb(100,255,255);\">cmd=RmProxyUrl&Url=<значение></td>
			<td widht=\"5px\"></td>
			<td style=\"color: rgb(100,255,255);\">-Удалить URL прокси из таблицы</td>
		</tr>
		<tr>
			<td style=\"color: rgb(255,100,255);\">cmd=RdAllProxyUrl</td>
			<td widht=\"5px\"></td>
			<td style=\"color: rgb(255,100,255);\">-Вывод на экран список прокси</td>
		</tr>
		<tr>
			<td style=\"color: rgb(100,255,255);\">cmd=RdAllProxyUrlJ</td>
			<td widht=\"5px\"></td>
			<td style=\"color: rgb(100,255,255);\">-Вывод список прокси в JSON</td>
		</tr>
		<tr>
			<td colspan=\"3\" ali align=\"center\" style=\"color: rgb(255,255,100);\">Для работы PING:</td>
		</tr>
	</table>";
	//
	$cmd = $_GET['cmd'];
	$url = $_GET['Url'];
	//
	$http = $_GET["http"];
	$https = $_GET["https"];
	$socks4 = $_GET["socks4"];
	$socks4a = $_GET["socks4a"];
	$socks5 = $_GET["socks5"];
	$UrlPort = $_GET["UrlPort"];
	$num = $_GET["num"];
	//
	$host = '192.168.7.150';	// Хост
	$user = 'user';				// Имя пользователя
	$pass = 'user';				// пароль пользователя
	$db_name = 'nsite_db';		// Имя базы данных
	if($cmd == null) {
		echo $help;
	}
	else if($cmd == "netstat") {
		$res = shell_exec("netstat -nlta | grep tcp | sed \"s/\n/<br>/g\"");
		echo $res;
	}
	else {
		$link = mysql_connect($host, $user, $pass); // Соединяемся с базой
		if (!$link) {
      	echo 'Error coonnect to database!';
      	exit;
   	}
   	else if($cmd == "DropProxyListTable") {
   		$sdb = "DROP TABLE ProxyList";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   	}
   	else if($cmd == "CreateProxyListTable") {
   		$sdb = "CREATE TABLE ProxyList(id INT AUTO_INCREMENT PRIMARY KEY, 
   		UrlPort varchar(32),
   		http INT,
   		https INT,
   		socks4 INT,
   		socks4a INT,
   		socks5 INT,
   		TimeWait FLOAT,
   		Country varchar(48),
   		RegionName varchar(48),
   		Status varchar(16),
   		UNIQUE (UrlPort))";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   	}
   	else if($cmd == "WrProxyUrl") {
   		$sdb = "INSERT INTO  ProxyList(UrlPort) VALUES ('".$url."')";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		$rows = mysql_num_rows($sql);
			$strUrlPort = "";
			$cnt = 0;
   		while($cnt < $rows)// получаем все строки в цикле по одной
			{
				$row = mysql_fetch_array($sql);
				if(($cnt + 1) < $rows)
    				$strUrlPort .= "\"".$row['UrlPort']."\",";// выводим данные URL
    			else 
    				$strUrlPort .= "\"".$row['UrlPort']."\"]";// выводим данные URL
    			$cnt++;
			}
			$strJSON = "{\n\"UrlPort\":[".$strUrlPort."\n}";
			echo $strJSON;
   	}
   	else if($cmd == "RmProxyUrl") {
   		$sdb = "DELETE FROM ProxyList WHERE UrlPort='".$url."'";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		$rows = mysql_num_rows($sql);
			$strUrlPort = "";
			$cnt = 0;
   		while($cnt < $rows)// получаем все строки в цикле по одной
			{
				$row = mysql_fetch_array($sql);
				if(($cnt + 1) < $rows)
    				$strUrlPort .= "\"".$row['UrlPort']."\",";// выводим данные URL
    			else 
    				$strUrlPort .= "\"".$row['UrlPort']."\"]";// выводим данные URL
    			$cnt++;
			}
			$strJSON = "{\n\"UrlPort\":[".$strUrlPort."\n}";
			echo $strJSON;
   	}
   	else if($cmd == "RdAllProxyUrl") {
   		$sdb = "SELECT * FROM ProxyList";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		//
   		while($row = mysql_fetch_array($sql))// получаем все строки в цикле по одной
			{
				$UrlPort = $row['UrlPort'];
    			echo '<p>UrlPort : '.$UrlPort.'</p>';// выводим данные
			}
   	}
   	else if($cmd == "RdAllProxyUrlJ") {
   		$sdb = "SELECT * FROM ProxyList";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		$rows = mysql_num_rows($sql);
			$strUrlPort = "";
			$cnt = 0;
   		while($cnt < $rows)// получаем все строки в цикле по одной
			{
				$row = mysql_fetch_array($sql);
				if(($cnt + 1) < $rows)
    				$strUrlPort .= "\"".$row['UrlPort']."\",";// выводим данные URL
    			else 
    				$strUrlPort .= "\"".$row['UrlPort']."\"]";// выводим данные URL
    			$cnt++;
			}
			$strJSON = "{\n\"UrlPort\":[".$strUrlPort."\n}";
			echo $strJSON;
			exit;
   	}
   	else if($cmd == "testproxy") {
   		$sdb = "SELECT * FROM ProxyList";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		$rows = mysql_num_rows($sql);
   		if($rows > 0) {
   			$cnt = 0;
   			$num = 0;
   			while($cnt < $rows) {
   				$row = mysql_fetch_array($sql);
   				$UrlPort = $row['UrlPort'];
   				if($num == $cnt) 
						break;
   				$cnt++;
   			}
   		}
   		else 
   			exit;
   		
   		$cmd = "./testproxy.sh ".$num." ".$UrlPort." &";
   		$strres = shell_exec($cmd);
   		echo "UrlPort=".$UrlPopt."cmd = ".$cmd;
   		exit;
   	}
   	else if($cmd == "resproxy") {
   		$sdb = "UPDATE ProxyList SET ";
   		$sdb .= "http = ".$http.",";
   		$sdb .= "https = ".$https.",";
   		$sdb .= "socks4 = ".$socks4.",";
   		$sdb .= "socks4a = ".$socks4a.",";
   		$sdb .= "socks5 = ".$socks5." ";
   		$sdb .= "WHERE UrlPort = \"".$UrlPort."\"";
			$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		$sdb = "SELECT * FROM ProxyList";
   		$query = sprintf($sdb);
   		$sql = mysql_db_query($db_name,$query);
   		if(!$sql) {
   			echo "Err : ". mysql_error();
   			exit;
   		}
   		$rows = mysql_num_rows($sql);
   		if($num < $rows)
   			$num++;
   		else 
   			$num = 0;
   		while($cnt < $rows) {
   			$row = mysql_fetch_array($sql);
   			$UrlPort = $row['UrlPort'];
   			if($num == $cnt) 
					break;
   			$cnt++;
   		}
   		$cmd = "./testproxy.sh ".$num." ".$UrlPort." &";
   		$strres = shell_exec($cmd);
   		echo "UrlPort=".$UrlPopt."cmd = ".$cmd;
   		exit;
   	}
   	else {
   		echo "<p>Uncnown coomahd : ".$cmd;
   		exit;
   	}
   }
?>


После чего с веб страницы были удачные попытки работы с базой.

Link to comment

Потом был скрипт BASH:

#!/bin/bash

# Тест прокси по URL
# Входные параметры №1 - номер по списку в базе, №2 - URL прокси сервера
#

tw="60"	# максимальное время ожидания
myurl="127.0.0.1"
((_http = 0))
((_https = 0))
((_socks4 = 0))
((_socks4a = 0))
((_socks5 = 0))
_num=$1
_pr=$2
_par=""

function fproxy()
{
	start=$(date +%s)
	str=$(curl -s --max-time $tw -x $_pr -U YOURUSER:YOURPASS ip-api.com/json)
	end=$(date +%s)
	if(((${#str} > 8))); then
		diff=$(( end - start ))
		((_http = 1))

	fi

	start=$(date +%s)
	str=$(curl -s --max-time $tw -x https://$_pr -U YOURUSER:YOURPASS ip-api.com/json)
	end=$(date +%s)
	if(((${#str} > 8))); then
		diff=$(( end - start ))
		((_https = 1))

	fi

	start=$(date +%s)
	str=$(curl -s --max-time $tw --socks4 $_pr ip-api.com/json)
	end=$(date +%s)
	if(((${#str} > 8))); then
		diff=$(( end - start ))
		((_socks4 = 1))

	fi

	start=$(date +%s)
	str=$(curl -s --max-time $tw --socks4a $_pr -U YOURUSER:YOURPASS ip-api.com/json)
	end=$(date +%s)
	if(((${#str} > 8))); then
		diff=$(( end - start ))
		((_socks4a = 1))

	fi

	start=$(date +%s)
	str=$(curl -s --max-time $tw --socks5 $_pr -U YOURUSER:YOURPASS ip-api.com/json)
	end=$(date +%s)
	if(((${#str} > 8))); then
		diff=$(( end - start ))
		((_socks5 = 1))

	fi
	echo "http:"$_http" https:"$_https" socks4:"$_socks4" socks4a:"$_socks4a" socks5:"$_socks5
	_par="ramdisk/index.php?cmd=resproxy&num="$_num"&UrlPort="$_pr"&http="$_http"&https="$_https"&socks4="$_socks4"&socks4a="$_socks4a"&socks5="$_socks5
	echo $_par
	toserver="--max-time 10 http://"$myurl"/"$_par
	curl $toserver
}

fproxy $1
exit 0








При запуске этого скрипта с параметрами "номер условный" и "IP/URL:Port" производится проверка указанного прокси на доступность по HTTP, HTTPS, SOCKS4, SOCKS4a, SOCK5 и завершает свою работу отправкой через Curl запроса с парамертами к Apache с PHP скриптом. Скрипт производит обработку и сохранение в базе, после чего увеличивает счётчик и выбирает новый IP/Url:Port из базы и вновь запускает этот BASH скрипт. И так циклически скрипты запускают друг друга. Эти оба скрипта BASH и PHP на устройстве UC-7112Lx-plus. Вроде работает....

Link to comment

Но сегодня у меня получидось собрать MySQL client на устройство (вот ссылка на архив):

https://yadi.sk/d/W3_IzV38rslFAA

Надо в сессии ROOT запустить setup.sh. у меня директории /lib и /usr на SD - карте.

Не пытайтесь подключиться локально (это по умолчанию) - на устройстве нет MySQL сервера.

вот:

www-data@Moxa:~$ mysql -u nsite -pnsite -h 192.168.7.150 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.5.5-10.1.45-MariaDB-0+deb9u1

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nsite_db           |
+--------------------+
2 rows in set (0.12 sec)
mysql> use nsite_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_nsite_db |
+--------------------+
| ProxyList          |
+--------------------+
1 row in set (0.00 sec)
mysql> select * from ProxyList;
+----+-----------------------+------+-------+--------+---------+--------+----------+---------+------------+--------+
| id | UrlPort               | http | https | socks4 | socks4a | socks5 | TimeWait | Country | RegionName | Status |
+----+-----------------------+------+-------+--------+---------+--------+----------+---------+------------+--------+
|  1 | 174.70.241.8:24398    |    0 |     0 |      1 |       1 |      1 |     NULL | NULL    | NULL       | NULL   |
|  3 | 66.135.227.178:4145   |    0 |     0 |      1 |       1 |      1 |     NULL | NULL    | NULL       | NULL   |
|  6 | 216.144.230.233:15993 |    0 |     0 |      1 |       1 |      1 |     NULL | NULL    | NULL       | NULL   |
|  8 | 162.243.108.129:8080  |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 10 | 207.97.174.134:1080   |    0 |     0 |      1 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 12 | 72.11.148.222:56533   |    0 |     0 |      1 |       1 |      1 |     NULL | NULL    | NULL       | NULL   |
| 14 | 174.76.48.230:4145    |    0 |     0 |      1 |       1 |      1 |     NULL | NULL    | NULL       | NULL   |
| 15 | 109.105.205.229:4145  |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 17 | 132.255.92.35:53281   |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 19 | 152.204.128.46:33047  |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 21 | 182.160.117.130:53281 |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 23 | 138.68.41.90:3128     |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 25 | 88.198.50.103:8080    |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 27 | 103.113.3.242:4145    |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 29 | 45.119.85.54:8080     |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 31 | 196.55.140.61:80      |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 33 | 81.201.60.130:80      |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 35 | 63.249.67.70:53281    |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 37 | 98.143.144.62:45582   |    0 |     0 |      0 |       1 |      0 |     NULL | NULL    | NULL       | NULL   |
| 39 | 52.251.47.125:3128    |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 41 | 95.174.67.50:18080    |    1 |     0 |      0 |       0 |      1 |     NULL | NULL    | NULL       | NULL   |
| 43 | 196.54.47.139:80      |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 45 | 196.54.50.164:80      |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 47 | 196.55.140.4:80       |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 49 | 167.71.119.18:9050    |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 51 | 103.215.16.238:4145   |    0 |     0 |      1 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 53 | 46.218.155.194:3128   |    1 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 55 | 161.202.226.194:80    |    0 |     0 |      0 |       0 |      0 |     NULL | NULL    | NULL       | NULL   |
| 57 | 3.11.214.31:80        | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 59 | 176.9.75.42:8080      | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 61 | 188.166.83.17:8080    | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 63 | 114.5.36.243:4145     | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 65 | 138.197.157.32:8080   | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 67 | 46.254.217.67:61781   | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 69 | 13.244.114.163:80     | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 71 | 138.197.157.32:1080   | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 73 | 191.96.42.80:1080     | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 75 | 109.232.106.236:52435 | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 76 | 96.54.47.197:80       | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
| 78 | 92.117.146.110:80     | NULL |  NULL |   NULL |    NULL |   NULL |     NULL | NULL    | NULL       | NULL   |
+----+-----------------------+------+-------+--------+---------+--------+----------+---------+------------+--------+
40 rows in set (0.01 sec)

mysql> 

Теперь BASH скрипты на самом устройстве умеют сами производить операции чтения/записи/изменения на удалённых MySQL серверах с базами данных:rolleyes:. Одним словом полноценный MySQL клиент прямо на UC-7112-LX-Plus и IA240LX

Link to comment
  • 4 months later...

Вот это:

876440576_2021-02-0411-07-45.thumb.png.1bc988250eb753facd56efda3cfd6e85.png

обёртка в виде HTML страницы этих двух скриптов (PHP и BASH). Работает с базой (там список прокси). UC-7112-Lx-plus проверяет их доступность непрерывно, выбирая из удалённой базы MySQL(на каком-то сервере в локальной сети). Следует отметить, что эта обёртка далека от завершения:

https://yadi.sk/d/BcZp-dXyyr3Epw

Клиент mysql на устройстве тут не используется.

Для работы потребуется установка curl на устройство это тут(надо выбрать последнюю версию: curl_7.63.zip ...и может ещё что-то будет полезное):

https://moxa.ru/forum/index.php?/topic/25195-сказка-про-nc-или-как-его-не-хватало/

Для работы в файле index.php изменить на свои значения:

//
	$host = '192.168.7.150';	// Хост
	$user = 'nsite';				// Имя пользователя
	$pass = 'nsite';				// пароль пользователя
	$db_name = 'nsite_db';		// Имя базы данных

Тут параметры сервера MySQL... IP адрес, пользователь, пароль и имя базы данных. Скрипт PHP (если его запускать автономно из браузера) позволяет кое-что формировать/изменять в самой базе (смотрите исходник файла).

Содержимое архива поместить в директорию работы сервера Apache на устройстве MOXA(IA240LX/IA241LX/UC7112Lx-Plus).

Для запуска/остановки скрипта на странице "скрипт проверки прокси" кнопки "старт" и "стоп" соответственно. Таблица "User Agent" в базе должна быть создана вручную. Можно воспользоваться утилитой mysql на самом устройстве (если установили конечно).

Окно "ПРОКСИ ЛИСТ" управляемое... интерактивно (по клику мышки) можно добавить/удалить IP:PORT прокси, а кнопка "Получить" выводит список IP:PORT прокси и результаты проверки из удаленной базы MySQL.

Остальные органы управления пока в доработке.

 

Link to comment
  • 3 weeks later...

доброго времени суток!

 

Вдруг стало сыпаться меж ног

я ноклноился охреневший

сначала думал что песок

а это порох не сгоревший

С ПРАЗДНИКОМ ДРУЗЬЯ( не Подруги потому как для Вас есть свой день... но позже, но поверьте я очень Вас люблю )

:rolleyes:

 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...