Предотвратяване на socat от кражба на stdin

Използвам socat за бързо грабване на telnet банер, като това:

for ip in $list
do
    socat -T 1 - tcp:$ip:23 &
done

Той преминава през списъка с определени IP адреси и за всеки един извиква socat, което свързва TCP socket на порт 23 с stdin (-) и прекъсва след една секунда, докато работи във фонов режим. Проблемът е, че всички фонови процеси използват един и същ stdin, така че всички ще висят. Опитах опцията readline, както и потискането на stdin с </dev/null, но без резултат. netcat, например, се държи по същия начин, освен ако -d не е указано да игнорира входа.

Редът socat, който посочих, е част от скрипт, който се използва за други цели, така че би било хубаво, ако проблемът може да бъде разрешен, без да се прибягва до masscan, nmap или netcat. Благодаря ти.


person Ulrik    schedule 03.10.2015    source източник
comment
Наистина не знам какво се опитвате да постигнете, но помага ли, ако замените - със заместващ процес, който не прави нищо? това: socat -T 1 <(:) tcp:$ip:23 &.   -  person gniourf_gniourf    schedule 04.10.2015
comment
Вие посочихте < /dev/null преди &, нали?   -  person that other guy    schedule 04.10.2015
comment
socat трябва да има време за изчакване след една секунда. Ако echo -n | или </dev/null се предоставят от единия или другия край на тръбопровода, той не изпраща нищо и незабавно прекъсва сесията, понякога дори преди банерът да се покаже. Когато се предоставя с <(:), socat се оплаква, че /dev/fd/.. е файлова система само за четене.   -  person Ulrik    schedule 04.10.2015


Отговори (1)


Трябва да има по-добър начин за това, но досега не съм го намерил.

Проблемът с echo -n | е, че когато ехото приключи, sigpipe ще бъде изпратен до socat.

така че, за да заобиколя това, го направих

докато е вярно; спя 10; готово | socat -T 1 - tcp:$ip:23

това дава тръба и не свършва.

person John Kearney    schedule 05.03.2020