Автор Тема: Програма, която да привързва stdin/stdout към tcp връзка  (Прочетена 2878 пъти)

Naka

  • Напреднали
  • *****
  • Публикации: 3205
    • Профил
Имам програма която работи постоянно и нищо друго не прави освен да чете stdin, да го обработва и да го изкарва обратно на  stdout.

Данните са текстови и са разделени с \n. тук за простота наричам програмата 'user_lines_process'. Тя е доволно сложно нещо, накрая има много опции, които заради тестването постоянно променям.

Има ли някакъв стандарен тоол (нещо подобно на TCP Wrapper) с който да може да стартира user_lines_process, да захване нейният стандартен вход и изход и да ги пренасочи към tcp сокет.

например нещо такова:
demonize -port 8080 -host localhost "user_lines_process"

целта ми е да мога отдалечено да тествам работа на user_lines_process например така:

echo 'some text to test' | nc localhost 8080

четох това
http://www.lainoox.com/bash-socket-programming/
http://shudder.daemonette.org/source/BashNP-Guide.txt

exec 3<> /dev/tcp/127.0.0.1/8080
user_lines_process 1>&3 <&3

Обаче така не става, защото порта 8080 трябва да е вече отворен. Това си е само писане на shell-а към сокет.

TCP Wrapper-ите от рода на tcpd също не стават, защото долкото разбирам те само изпълняват един път програмата, когато дойде конекция и след това я забравят. А при мен user_lines_process работи непрекънато. Не е направена да обработи еднин ред и след това да излезе.


това
nc -k -l 8080 | user_lines_process

работи, но само в едната посока  :'(- слуша на порт 8080, но само за stdin - и не може да изпрати изхода от stout обратно на 8080.

Този проблем като гледам е доволно просто нещо и се надявах да има някаква програма с която да мога набързо да закърпя нещата - докато тествам и променям опциите. Като всичко е готово ще бутна user_lines_process в някой скрит, който да прави всичко това, но засега не ми се пише още скрипт, щото имам още много неизвестни. :'(
« Последна редакция: Aug 25, 2012, 13:10 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

niakoi

  • Напреднали
  • *****
  • Публикации: 49
    • Профил
мисля че добре си се насочил с нц,
http://ubuntuforums.org/showthread.php?t=828870
виж т.2

поздрави
нас
Активен

tdonev

  • Гост
.. изтрито от автора ..
« Последна редакция: Feb 03, 2015, 00:42 от Тодор Донев »
Активен

Nedko Arnaudov

  • Напреднали
  • *****
  • Публикации: 38
    • Профил
ssh няма ли да ти свърши работа? TCP е, но криптирано.
Активен

geroy

  • Напреднали
  • *****
  • Публикации: 198
  • Distribution: Windows, NetBSD, Devuan
    • Профил
    • WWW
Също така tcpserver от пакета ucspi-tcp на DJB
Активен

Naka

  • Напреднали
  • *****
  • Публикации: 3205
    • Профил
Мерси nc наистина върши работата.....  [_]3 Само че откъде да се сетя като моята версия на nc нямаше нито -c нито -е опция. :'(

То се оказва, че в света щъкат няколко версии на nc.
инсталирах си варянт на nc (който обаче се казва ncat) от сайта на nmap
http://nmap.org/ncat/
http://nmap.org/book/ncat-man-options-summary.html


програмката я стартирам така:
ncat --allow localhost,xxx.xxx.xxx.xxx -l 8181 --keep-open --max-conns 1 --sh-exec "user_lines_process "

а пък на отдалечения компютър пиша това:
nc server_ip 8181

това не е точно което исках, защото се оказа че nc/ncat рабoтят по следният начин:
при стартирането на командата:
ncat ...... -l 8181 --sh-exec "user_lines_process"

user_lines_process не се стартира. ncat изпълнява скрипта само когато се инициализира връзка отдалечено. В действителност скрипта се стартира даже и ако отдалечено се пусне nmap да сканира за отворени портове и премине и през 8181.

докато е отворена връзката скрипта е жив и мога да се тествам отдалечено безкрайно време ред след ред. обаче ако прекъсна връзката на клиентският компютър ncat спира скрипта.(например след натискане Ctrl-C)
След нова конекция всичко започва пак наново. Както и да е това засега върши идеална работа.

Исках въпросната програма да се стартира един път в началото и да не може да се спре независимо какво се изпраща отдалечено и независимо дали е прекъсната връзката. След време ще го напиша в конзолен PHP скрипт. Имам един пример написан на perl, но въобще не ми се занимава с perl.

Някой знае ли коя е еквивалентната функция на PHP на това:
http://perldoc.perl.org/IPC/Open2.html
« Последна редакция: Aug 31, 2012, 22:09 от Naka »
Активен

Perl - the only language that looks the same before and after encryption.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Perl stdin
Web development
sunhater 9 2611 Последна публикация Feb 01, 2007, 11:53
от sunhater
gzip: stdin not in gzip format
Настройка на програми
NikolayDONG 4 1819 Последна публикация May 07, 2014, 23:58
от NikolayDONG