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

oiv_1968

Пользователи
  • Posts

    163
  • Joined

  • Last visited

Posts posted by oiv_1968

  1. Вы наверное правы. Сейчас я только блокировал список URL, методом перенаправления на адрес веб странички в локальной сети...

    Радует одно - не занимает много ОЗУ. И ТВ онлайн и многое другое с браузера, где много вкладок открыто... в том числе и блокированных. Количество соединений достаточное. Из одной подсети (LAN2) в другую подсеть с интернетом (LAN1) с перенаправлением при блокировке на вебсервер в первой подсети(LAN2). И это всё одновременно кроме прочего остального может малыш UC-7112-Lx-Plus :wub:

  2. Вот описание и возможные настройки

    http://wiki.rosalab.ru/ru/index.php/Блокировка_интернет_рекламы_с_помощью_Privoxy

    http://open-life.org/blog/howto/188.html

    устройство UC-7112-Lx-Plus "висит на гвоздике" и фильтрует ряд URL адресов... на случай когда ребёнок

    приезжая ко мне использует интернет через мой комп. Хорошо помогает:rolleyes:

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

    Решение найдено... кривое но работает:

    1) На некой машине с Linux имеется компилятор для устройства и некий "умный" скрипт, который запускается при включении. На ней же и доступный для устройства NFS.

    2) На устройстве примонтирована директория NFS ттой самой машины. Устройство производит некие(соответствующие) действия и сохраняет командный файл.

    3) "Умный" скрипт на машине Linux найдя этот командный файл что-то компилирует.

    4) Устройство запускает результат той компиляции, даже не загружая себе... NFS ведь общий как для устройства, так и для машины с Linux.

    Всё это сейчас активно использую. Спасибо NFS!!!!  :rolleyes:

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

     

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

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

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

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

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

    :rolleyes:

     

  5. Вот это:

    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.

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

     

  6. Но сегодня у меня получидось собрать 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

  7. Потом был скрипт 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. Вроде работает....

  8. Первая попытка... а на что 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;
       	}
       }
    ?>
    
    
    

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

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

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

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

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

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

     

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

    Вот реализовал доступ к OPC UA к серверу для сбора параметров из устройства IA240. Теперь возникло желание(задание) что бы это же устройство получало доступ к MySQL серверу с целью их сохранения. Вот перебрал много чего из исходников, но имеющийся кросс-компилятор не умеет того что умеет обычный на Debian.

    Если не сложно ткните носом на подходящие исходники для сборки libmysqlclient(mysql-client).

    Заранее благодарен.

  11. В 04.02.2019 в 13:02, oiv_1968 сказал:

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

    Извините, за беспокойство! Но есть ли у Вас возможность/желание оказать помощь/подсказку. Я честно сказать не знаю куда и как копать. Вопрос в следующем.

    Требуется в UC-7112-LX-Plus примонтировать сетевой ресурс FTP и желательно вообще SMB с целью сохранения данных там от самого устройства. Скрипт BASH должен это делать и ещё то что сделано на Си.

    Методом проб и ошибок с бубном собрал (громко сказано):

    
    root@Moxa:~# curl -V              
    curl 7.63.0 (arm-unknown-linux-gnu) libcurl/7.63.0 OpenSSL/1.0.2p
    Release-Date: 2018-12-12
    Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
    Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL TLS-SRP UnixSockets HTTPS-proxy 
    root@Moxa:~# 

     

    
    root@Moxa:~# mount.fuse -V
    usage: mount.fuse type#[source] destination [-t type] [-o opt[,opts...]]

     

    
    root@Moxa:~# curlftpfs -V
    curlftpfs 0.9.2 libcurl/7.63.0 fuse/2.9

     

    Вот только (в чём и вопрос):

    
    root@Moxa:~# curlftpfs www-data:www-data@192.168.0.232 /var/tmp
    fuse: device not found, try 'modprobe fuse' first

    а модуля fuse нет... ну понятно, что и fuse.ko нет. Если библиотеки  получилось собрать:

    
    lrwxrwxrwx    1 root     root           16 Feb  2 22:30 libfuse.so -> libfuse.so.2.9.2
    lrwxrwxrwx    1 root     root           16 Feb  2 22:32 libfuse.so.2 -> libfuse.so.2.9.2
    -rwxr-xr-x    1 root     root       753697 Feb  3 17:10 libfuse.so.2.9.2

    Не без Ваших:

    
    lrwxrwxrwx    1 root     root           23 Feb  3 03:30 libglib-2.0.so.0 -> libglib-2.0.so.0.2400.2
    -rw-r--r--    1 www-data www-data  1480995 May 24  2015 libglib-2.0.so.0.2400.2

    И других, которые Вы предоставили ранее вместе с mc.

     

    Можно ли либо обойтись без fuse.ko либо пересобрать mount.fuse и/или curlftpfs???

    Реально ли реализовать cifs на UC-7112-LX-Plus???

    Была идея обойтись только curl, но вот не вышло работать с ним в скрипте, где надо передавать данные из параметра в bash, а не из файла. Места в устройстве и так мало, USB отсутствует. Вот и решил внешнее сетевое устройство. Про NFS пока не думал.

     

    Спасибо!

    Прошу прощения... но сейчас использую NFS и очень доволен. Так что вышеупомянутое теперь без надобности. На устройстве монтируется удалённый каталог NFS:). А если надо от устройства что-то сохранять на SMB, то curl (на самом устройстве) всяко способствует.

  12.  

    Это архив для установки:

    https://yadi.sk/d/RHMbcg450rT4nQ

    Установка вручную.

    Следует отметить что у меня всё что можно монтировано на SD карту. Особо кропотливо было монтирование /etc и тем не менее:

    www-data@Moxa:~$ mount                
    rootfs on / type rootfs (rw)
    /dev/root on / type jffs2 (ro,noatime)
    proc on /proc type proc (rw,nodiratime)
    /dev/ram3 on /dev type ext2 (rw)
    /dev/ram0 on /var type ext2 (rw)
    /dev/mtdblock3 on /tmp type jffs2 (rw,noatime)
    /dev/mtdblock3 on /home type jffs2 (rw,noatime)
    /dev/mtdblock3 on /etc type jffs2 (rw,noatime)
    tmpfs on /dev/shm type tmpfs (rw)
    devpts on /dev/pts type devpts (rw)
    /dev/mmc1 on /var/sd type ext2 (rw)
    /dev/mmc1 on /etc type ext2 (rw)
    tmpfs on /var/ramdisk type tmpfs (rw)
    /dev/mmc1 on /root type ext2 (rw)
    /dev/mmc1 on /bin type ext2 (rw)
    /dev/mmc1 on /lib type ext2 (rw)
    /dev/mmc1 on /sbin type ext2 (rw)
    /dev/mmc1 on /usr type ext2 (rw)
    /dev/mmc1 on /home type ext2 (rw)
    tmpfs on /home/httpd/ramdisk type tmpfs (rw)
    www-data@Moxa:~$ 

    в архиве есть мой /etc/rc.d/rc.local - чисто как пример, потому как на SD надо сначала сделать зеркальные директории (/bin, /lib. /usr и др.)

    Для установки надо скопировать файлы в одноимённые директории.

    privoxy на UC-7112-LX-Plus работает вполне проворно (сейчас я в интернете через privoxy на UC-7112-LX-Plus). Присутствует и родной вэб-интерфейс.

    snapshot72.thumb.png.4a58fca3e00f3d79f2c4910de9f926e0.png

     

    Настройку можно проводить и с его помощью. Но более оптимальная настройка с помощью редактирования /etc/privoxy/config И сто самое интересное что сам privoxy не надо перезапускать после изменения настроек. Так же и список прокси изменяется без его перезапуска(ведь privoxy выполняет проход по цепочке внешних прокси). Так же и ряд тестов - к примеру он показывает и заголовки запросов... да и документация и примеры так же через вэб-интерфейс.  Самое интересное что он отлично работает и на таких устройствах. Тут и фильтры картинок,  рекламы, всплывающих страниц и прочего.

     

     

  13. Доброго времени суток! Вот это:

    opc_ua_work.zip

    мой рабочий вариант доступа к данным OPC UA серверу. Как пример запуска:

    www-data@Moxa:~/ramdisk$ ./myopcclient
     Доступ к данным контроллера SIMATIC.S7-1500.OPC-UAServer (без авторизации)
    вид:
    myopcclient opc.tcp://<IP>:<PORT>/None/None
    где:
    <IP>   - IP адрес OPC UA сервера
    <PORT> - порт прослушивания OPC UA сервера
    

    Но это для вывода данных в консоль. Данных из списка. Конечно не одним запросом, а несколькими. Сервер почему-то ограничивает количество параметров в одном запросе. Так что по 6 параметров в одном запросе. так что весь пакет параметров теперь получаю на IA240 за 4 секунды.

    Вот список:

    #define _melt_mp1_com_sta_opmode                        "3:\"\"MELT_mp1\".\"com\".\"sta\".\"OpMode\"\""
    #define _melt_mp2_com_sta_opmode                        "3:\"\"MELT_mp2\".\"com\".\"sta\".\"OpMode\"\""
    #define _melt_mp1_melt_ope_temperature          "3:\"\"MELT_mp1\".\"melt\".\"ope\".\"Temperature\"\""
    #define _melt_mp2_melt_ope_temperature          "3:\"\"MELT_mp2\".\"melt\".\"ope\".\"Temperature\"\""
    #define _melt_mp1_sin_ope_temperature           "3:\"\"MELT_mp1\".\"sin\".\"ope\".\"Temperature\"\""
    #define _melt_mp2_sin_ope_temperature           "3:\"\"MELT_mp2\".\"sin\".\"ope\".\"Temperature\"\""
    #define _melt_mp1_melt_ope_weight                       "3:\"\"MELT_mp1\".\"melt\".\"ope\".\"Weight\"\""
    #define _melt_mp2_melt_ope_weight                       "3:\"\"MELT_mp2\".\"melt\".\"ope\".\"Weight\"\""
    #define _melt_mp1_melt_ope_manpower                     "3:\"\"MELT_mp1\".\"melt\".\"ope\".\"ManPower\"\""
    #define _melt_mp2_melt_ope_manpower                     "3:\"\"MELT_mp2\".\"melt\".\"ope\".\"ManPower\"\""
    #define _inv_inv1_sta_power                                     "3:\"\"INV_inv1\".\"sta\".\"Power\"\""
    #define _inv_inv2_sta_power                                     "3:\"\"INV_inv2\".\"sta\".\"Power\"\""
    #define _inv_inv1_sta_current                           "3:\"\"INV_inv1\".\"sta\".\"Current\"\""
    #define _inv_inv2_sta_current                           "3:\"\"INV_inv2\".\"sta\".\"Current\"\""
    #define _inv_inv1_sta_voltage                           "3:\"\"INV_inv1\".\"sta\".\"Voltage\"\""
    #define _inv_inv2_sta_voltage                           "3:\"\"INV_inv2\".\"sta\".\"Voltage\"\""
    #define _inv_inv1_sta_freq                                      "3:\"\"INV_inv1\".\"sta\".\"Frequency\"\""
    #define _inv_inv2_sta_freq                                      "3:\"\"INV_inv2\".\"sta\".\"Frequency\"\""
    #define _fur1_tilted                                            "3:\"\"MELT_fur1\".\"ope\".\"Tilted\"\""
    #define _fur2_tilted                                            "3:\"\"MELT_fur2\".\"ope\".\"Tilted\"\""
    #define _inv1_ison                                                      "3:\"\"INV_inv1\".\"sta\".\"IsOn\"\""
    #define _inv2_ison                                                      "3:\"\"INV_inv2\".\"sta\".\"IsOn\"\""
    #define _i_hvswitch1ison                                        "3:\"\"I_HVSwitch1IsOn\"\""
    #define _o_hvswitch1Lock                                        "3:\"\"O_HVSwitch1Lock\"\""
    #define _o_hwswitch1on                                          "3:\"\"O_HVSwitch1On\"\""
    #define _o_lmhvswitch1on                                        "3:\"\"O_LMHVSwitch1On\"\""
    #define _act_date                                                       "3:\"\"MELT_mpc\".\"com\".\"ActDate\"\""
    #define _act_time                                                       "3:\"\"MELT_mpc\".\"com\".\"ActTime\"\""

    Это определения для формирования.

    Понятное дело у Вас будет свой список и своё количество. Приложенный код работает с самодельным сервером связи... это если в строке параметров указать ещё и IP и PORT этого сервера. Но рассматривать весь проект тут не буду.

    Вот код из скрипта запуска (BASH)

    #!/bin/bash
    
    case $par in
    ...
            myopcclient_one) # тут буде только вывод в консоль
                    killall -9 myopcclient
                    echo "Starting myopclient..."
                    ./myopcclient opc.tcp://$ip_opc:$p_opc/None/None &
            ;;
            myopcclient) # тут данные сразу в сервер связи
                    killall -9 myopcclient
                    echo "Starting myopclient..."
                    ./myopcclient opc.tcp://$ip_opc:$p_opc/None/None $ip_mserver $p_mserver &
            ;;
    
    ...
    esac

    Вообще-то по исходникам всё видно.

  14. В 20.03.2020 в 15:15, oiv_1968 сказал:

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

    Вопрос:

    Есть ли возможность используя обращение к OPC UA серверу сразу в один запрос читать несколько параметров, а не по одному (вышеуказанный пример). Уж больно большой интервал в получении данных по списку по одному.

    Спасибо!

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

    Спасибо, что уделили внимание!

    Научился читать данные по необходимому списку имён за один запрос к OPC UA серверу.

    Вопрос снят!

    Спасибо!

    Позднее будет предъявлен вполне рабочий код.

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

    Вопрос:

    Есть ли возможность используя обращение к OPC UA серверу сразу в один запрос читать несколько параметров, а не по одному (вышеуказанный пример). Уж больно большой интервал в получении данных по списку по одному.

    Спасибо!

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

    Проблема: посылаю запрос:

    3:""MSG_AlarmToPanel"."BitList"."External Voltage On""

    А по Wirechark (снифер) проходит:

    3:""MSG_AlarmToPanel"."BitList"."External

    найден участок кода(предположительно)

    XML_N* XML_N::setAttr( const string &name, const string &val )
    {
    	
    	//
        for(unsigned iA = 0; iA < mAttr.size(); iA++)
    	if(mAttr[iA].first == name) {
    	    mAttr[iA].second = val;
    	    return this;
    	}
    
    	mAttr.push_back(pair<string,string>(name,val));
    
        return this;
    }

    Пропускает всё до первого пробела. А Товарищи ABP-шники сделали имя параметра с пробелами. С Си работаю, но не с C++ и string-ом конкретно. И именно этот параметр важен очень для автоконтроля...а остальные параметры сделали нормально и я их спокойно читаю.

    Есть ли возможность исправить?

    Спасибо.

  17. В 25.11.2017 в 13:04, oiv_1968 сказал:

    Доброго времени суток Люди Добрые!

    Собственно возник вопрос:

    Как получать результат в bash-скрипт из NetCat. Тестировал вот это на Debian (это заготовка):

    
    #!/bin/bash
    #
    
    _p1=$1
    _p2=$2
    _p3=$3
    _nc=""
    _url=""
    _port=""
    
    
    #определение принадлежности к MOXA
    _un=$(uname -a | awk '{print($2)}')
    case $_un in
    	Moxa)
    		_nc="/mnt/sd/nc/nc"
    	;;
    	*)
    		_nc="nc"
    	;;
    esac
    
    function _help()
    {
    	echo "help"
    }
    
    function _spp()
    {
    	str=$(echo -e $_port | sed "s/-/ /g")
    	_startport=$(echo "$str" | awk '{print($1)}')
    	_stopport=$(echo "$str" | awk '{print($2)}')
    	while ( ((_startport <= _stopport)) )
    	 do
    	  str=""
    	  str=$($_nc -vnz -4 $_url $_startport 2>&1)
    	  res=$(echo "$str" | grep "succeeded!")
    	  if [ "$res" != "" ]
    	   then
    	    echo "$_url $_startport"
    	  fi
    	  ((_startport += 1))
    	done
    }
    
    case $1 in
    	"help")
    		_help
    	;;
    	"-ip")
    		_url=$2
    		case $3 in
    			"-p")
    				_port=$4
    				if [ "$_port" == "" ]
    				 then
    				  echo "-p parametr ?"
    				else
    				 _spp
    				fi
    			;;
    			*)
    				echo "parametr ???"
    			;;
    		esac
    	;;
    	*)
    		echo "use \"help\""
    	;;
    esac

    понятно... в локальной сети:

    
    igor@debian-i:~/coding/bash/nsite2$ ./spp.sh -ip 192.168.0.1 -p 21-80
    192.168.0.1 23
    192.168.0.1 53
    192.168.0.1 80
    igor@debian-i:~/coding/bash/nsite2$ 

    И все бы не плохо но результат определял по слову в выводе

    В Debian на ПК:

    
    igor@debian-i:~/coding/bash/nsite2$ nc -vnz 192.168.0.1 80
    Connection to 192.168.0.1 80 port [tcp/*] succeeded!
    igor@debian-i:~/coding/bash/nsite2$ 

    А вот тоже самое на UC-7112-Lx-plus:

    
    www-data@Moxa:~$ nc -vnz 192.168.0.1 80
    192.168.0.1:80 (Dlink-Router.Dlink) open
    www-data@Moxa:~$ 

    Так по какому принципу (правилу) определять, что порт открыт. Мучение испытывал мой старенький роутер (DIR-620) от ПК и MOXA.

    Хочется что бы скрипт работал корректно и там и там

     

    Заранее благодарен за ответ!

    Спасибо!

    Долго ли, коротко ли... но вот:

    nc -vvz $_url $_port 2>/dev/null
    res=$?
    if [ "$res" = "1" ]; then
    	echo "На $_url не найден порт $_port" 
    	exit 1
    fi

    найдено решение. Работает!

  18. Доброго времени суток! Вот:

    https://yadi.sk/d/WHwi29WSaRfNoQ

    Это ещё один вариант как проба с вебсокетом. Ещё не производил доработку собственно сервера WS. Добавились только элементы.17.png.0e9f5e67f077a39a081dfe8133352aa3.png

    Так же работает на устройстве UC7112LX-Plus и IA240. Но в отличии от PC не быстро. Все элементы в динамике (кнопки и слайдеры в работе). Да и индикаторы так же.

    Тут шла проверка на перегрузку индикаторов (они грязно-желтым... вертикальный и горизонтальный), которые от 0 до 100. Слайдеры (красный и зеленый - горизонтальный и вертикальный) индицируют параметр угла (0...360 градусов) ну и индикаторы секторальные 4 штуки - у всех начальный угол разный (0, 90, 180, 270). При клике на любой слайдер в соответствующем месте будет установлен соответствующий угол. При работе идёт инкремент угла... при значении угла = 360 он обнуляется и идет опять инкремент, но установка ручная по клику слайдера. Кнопки орисовывают фигуры, которые позже затираются постоянной перерисовкой области экрана. Всё отображается браузером и клик на элементах управления на нем же.

    Для запуска применять скрипт start.sh в директории work в которой все файлы. Их поместить на устройство в доступную веб серверу область... и запуск стартом скрипта. Из браузера на ПК зайти на устройство с соблюлением пути к файлу index.html... ну как обычно.

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

    https://yadi.sk/d/bh3lmBTtdxx8Rg

    Это "bashsimplecurses" взято из гитхаба. Для работы надо утилиты fold и sec, которых нет на устройстве. Почитал что это за утилиты и реализовал их на Си именно для устройства. Всё положил в архив. Из надо взять из него и поместить в /usr/sbin (у меня директория /usr примонтирована на SD карту.) после этого этот пакет будет работать. Следует только учесть что sleep 0.5 не будет работать на устройстве, потому-что реализован usleep. И потребуется ncurses:

      https://yadi.sk/d/exxyLTUgKewiog

    Ранее он уже упоминался.

    Утилиты сделаны самодельные (читал о них и смотрел примеры их работы) и на полное соответствие не претендуют... совпадают только их названия и функционал из примеров. Испытано на bashsimplecurses.

    Теперь можно писать скрипты с псевдографикой. В примерах видел применение в CGI.

  20. В 23.02.2020 в 20:18, AndyTrof сказал:

    1. Скачал готовый образ Ubuntu 14 - 32bit для VirtualBox - osboxes.org. На его основе создал виртуалку.

    2. Установил крос-компилятор - 

    
    sh arm-linux-1.3.sh

    3. Прописал путь к нему в $PATH

    
    echo $PATH
    PATH=$PATH:/usr/local/arm-linux/bin
    echo $PATH

     4.  Собрал пример hello c диска 

    
    make

    в директории с примером. 

    Сборка прошла нормально. Теперь нужно разобраться как задействовать Eclipse для работы с кодом и сборки. 

    Коллеги, а кросс-компилятор на Mac OS работает или нет ?  

     

    Ранее применял WinXP с виртуальным Debian. Позже Debian. Сейчас Debian(64бита) и потребовалось ставить кучу либов дабы запустить кросс-компилятор. Желает работать исключительно с x86 (32бита). По сему виртуальная машина самое то. Можно конечно сторонний GCC установить.

    Из сред разработки испытал Code::Blocks и CodeLite работает отлично, но сервер(для отладки) не применял. Компилятор сей подключать к данным средам просто. QtCreator не стал применять как и Eclipse.Для проблемных мест в коде вставляю вывод сообщений в код.

    Извините если помешал общению.

×
×
  • Create New...