Перенаправить порт на локальном хосте на какой-то удаленный хост: порт

КомплексAWKраствор:

awk -F'[()]' '{ sub(/INSERT INTO */,"",$1); 
                printf "SELECT * FROM %s WHERE ",$1;
                len=split($2, f, ","); split($4, v, ","); 
                for (i=1; i<=len; i++) printf "%s=%s%s", f[i], v[i], (i==len? ";":" AND ");
                print "" 
              }' test_inserts
  • -F'[()]'-разделитель сложных полей
  • sub(/INSERT INTO */,"",$1)-удалить INSERT INTOфразу из 1-го поля (для извлечения таблицы имя)
  • printf "SELECT * FROM %s WHERE ",$1-напечатать начало оператора SQL, содержащего имя таблицы
  • split($2, f, ",")-разделить второе поле с помощью разделителя ,для получения имен полей(fстановится массивом имен полей)
  • split($4, v, ",")-разделить 4-е поле разделителем ,для получения значений поля(vстановится массивом значений полей)

Выход:

SELECT * FROM table1 WHERE field1='values1' AND field2='value2' AND field3='value3';
SELECT * FROM table1 WHERE field1='other_values1' AND field2='other_value2' AND field3='other_value3';
SELECT * FROM table1 WHERE field1='another_values1' AND field2='another_value2' AND field3='another_value3';
SELECT * FROM table2 WHERE table2_field1='table2_values1' AND table2_field2='table2_value2' AND table2_field3='table2_value3' AND field4=;
SELECT * FROM table2 WHERE table2_field1='other_table2_values1' AND table2_field2='other_table2_value2' AND table2_field3='other_table2_value3' AND table2_field4=;
SELECT * FROM table2 WHERE table2_field1='another_table2_values1' AND table2_field2='another_table2_value2' AND table2_field3='another_table2_value3' AND table2_field4='another_table2_value4';
0
07.01.2020, 15:09
2 ответа

Самое простое решение — запустить какой-нибудь TCP-прокси. Вы можете использовать socat, например:

socat tcp-listen:5555,bind=127.0.0.1,fork tcp:remotehost.some.where:4444

Пока это работает, подключения к порту 5555на вашем локальном хосте будут переадресовываться на порт 4444на remotehost.some.where.

Используемая здесь команда прослушивает только 127.0.0.1. Если вы действительно хотите принимать подключения от других хостов через порт 5555, вы можете отказаться от опции bind=127.0.0.1.

3
28.01.2020, 02:38

Есть несколько способов сделать это.

1 )Если у вас GNU/Linux, просто используйте для этого iptables;

2 )Если вы действительно, действительно, ДЕЙСТВИТЕЛЬНО хотите использовать SSH, создайте пару ключей RSA, скопируйте ее в свой файл ключей ~./ssh/authorized _и повторите свою команду, добавив -Nвариант.

3 )Если вы используете дистрибутив на основе Debian или -, вы можете использовать redir.

4 )Вы также можете выполнить это, используя socat, вот так:

socat TCP4-LISTEN:80,fork TCP4:www.yourdomain.org:8080

Надеюсь, это поможет.

0
28.01.2020, 02:38

Теги

Похожие вопросы