nixp.ru v3.0

23 апреля 2024,
вторник,
06:44:34 MSK

Аватар пользователя Toha
Toha написал 14 мая 2015 года в 21:24 (6485 просмотров) Ведет себя неопределенно; открыл 23 темы в форуме, оставил 68 комментариев на сайте.

Захотелось мне между двумя железками передавать сообщения и реагировать на них.(подробности желания уже изложены на 2 форумах. по решению Д.Шурупова могу или выложить ссылки, или скопировать сюда)
Показалось мне отличным решением использовать netcat -l и перенаправить ввод-вывод в скрипт awk.
Пробую сделать скрипт awk_script:

#!/usr/bin/awk -f
/hello/ {print "ehlo"}


и перенаправить вывод netcat в этот скрипт:

netcat -lvp 12345 -e 'awk -f /opt/sbin/servawk'

со стороны клиента получаю:

nc 192.168.1.1 12345
awk_script: applet not found


Пробовал поставить gawk, симптомы те же самые…
Что копать, куда искать?

Toha

Что то совсем глухо… Живые есть?

fhunter

У меня в netcat-е вообще нет ключа -e (и в тех man-ах которые есть его тоже не видно).
Вы точно уверены, что именно так?

PS. А если по шагам диагностировать?
сделать скрипт исполняемым (/opt/sbin/servawk), попробовать запустить его и проверить результат.
Потом попробовать запустить netcat так: (если у вас -e работает) netcat -lvp 12345 -e /opt/sbin/servawk
?

fhunter
busybox nc -lp 12345 -e ./servawk

Вот так вот под debian работает

Правда ответ не даёт, пока соединение не закроешь.

Toha

У меня WRT-подобный mipsel linux. В busebox скомпилирована awk. а netcat внешняя программа.
С учетом всех глюков, наверное будет проще наговнокодить свою серверную часть на perl/python

fhunter

Сегодня вечером попробую на роутере дома.

fhunter

Попробовал. (openwrt 12.09, attitude adjustment).
Результаты ровно как описанные в начальном посте.

Решение:

mkfifo /tmp/test
nc -lvp 12345 < /tmp/test | awk -f scriptname > /tmp/test

так работает.

Toha

Ты крут! Мне такая, хитро закольцованная, конструкция в голову не приходила.
Огромный респект! это ж теперь я не одну проблему смогу решить.
СПАСИБО!

fhunter

Пожалуйста, изобретение не моё, если что.

Toha

ну все новое, это хорошо забытое старое.
Я такую конструкцию не нашел (хотя перенаправление ввода-вывода гуглил, но видимо недостаточно усердно).
с каждым из операторов <,|,> по-отдельности знаком, а общую конструкцию из них сообразить не смог.
Так что, извини, но все лавры первооткрывателя я буду вешать на тебя ;)
А если поделишься ссылочкой откуда увидел буду еще благодарнее. Может еще чему умному научусь.

fhunter

man netcat в debian :) Я не поленился его дочитать.
http://morgawr.github.io/hacking/2014/03/29/shellcode-to-reverse-bind-with-netcat/ — и вот здесь.

Toha

Научился выключать домашний сервер «одним движением». (ну быдлокодер я…)
cat /etc/init.d/wait_shtw

#!/bin/sh /etc/rc.common
# Copyright (C) 2007-2011 OpenWrt.org
START=98
start() { mkfifo /tmp/test netcat -lvp 12345 < /tmp/test | awk -f /root/testscript.awk > /tmp/test& }
stop() { killall netcat killall awk }


не забыть после создания:

~# chmod +x /etc/init.d/wait_shtw
~#/etc/init.d/wait_shtw enable


cat /root/testscript.awk
Код:

#!/usr/bin/awk -f
/poweroff/ {
                system("nohup poweroff -d 3")
                print "HTTP/1.1 200 OK"
        }


Теперь при http GET на ip_of_server:12345/poweroff сервак выдает ответ HTTP/1.1 200 OK и отрубается.

Для одной кнопки использую Tasker под андроид с запросом httpGET и обработкой ответа (показывает уведомление с вибрацией), запускается нажатием на виджет.

Жду критики…

Последние комментарии

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.