Перейти к содержимому
Калькуляторы

Помогите разобраться с socat

На 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".

Видимо дело в ней, но не пойму, как делать правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Минимальный пример:

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

Хотя например тут пишут, что должно работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.