alibek Posted April 22, 2018 · Report post На CentOS нет netcat (ncat, nc), вместо этого там более универсальная утилита socat. Мне нужно делать пакетные whois-запросы. Делаю так (минус — альяс для STDIO): > socat - TCP-CONNECT:whois.cymru.com:43 begin Bulk mode; whois.cymru.com [2018-04-22 17:25:41 +0000] <<< 8.8.8.8 15169 | 8.8.8.8 | GOOGLE - Google LLC, US <<< end Работает (значком <<< пометил ответ сервера). Делаю так: socat FILE:list-whois.txt TCP-CONNECT:whois.cymru.com:43 Пустой экран, никакой реакции. В файле list-whois.txt тоже никаких изменений. Если включить отладку, то файл считывается, затем отправляется в сокет и на этом сокет закрывается, ответ я не получаю. Ну что ж, возможно для двунаправленного канала есть какие-то особенности с файлами. Делаю так: cat list-whois.txt | socat - TCP-CONNECT:whois.cymru.com:43 Но и тут тишина. Сервис рекомендует такое использование в пакетном режиме: netcat whois.cymru.com 43 < list01 | sort -n > list02 Вроде бы альтернативой этой команде как раз и должно быть что-то вроде: socat - TCP:whois.cymru.com:43 < list01 Но видимо чего-то я не учитываю. P.S. Кстати, при подробном логе проскакивает строчка "Transport endpoint is not connected". Видимо дело в ней, но не пойму, как делать правильно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted April 22, 2018 · Report post Минимальный пример: echo "8.8.8.8" | socat TCP:whois.ripe.net:43 - Вроде бы должен работать — подключиться, отправить строку, принять данные. Подключается, отображает "шапку" (приветствие), но на этом все: > echo "8.8.8.8" | socat TCP:whois.ripe.net:43 - % This is the RIPE Database query service. % The objects are in RPSL format. % % The RIPE Database is subject to Terms and Conditions. % See http://www.ripe.net/db/support/db-terms-conditions.pdf Хотя например тут пишут, что должно работать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
snvoronkov Posted April 22, 2018 · Report post In the transfer phase, socat watches both streams' read and write file descriptors via select() , and, when data is available on one side and can be written to the other side, socat reads it, performs newline character conversions if required, and writes the data to the write file descriptor of the other stream, then continues waiting for more data in both directions. When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...