Jump to content
Калькуляторы

Помогите разобраться с 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".

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.