Получение данных по tcp соединению

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Получение данных по tcp соединению

Сообщение Frank »

Хочу приделать график статистики для dc++ серверов.
Задача: подключившись к серверу, получить от него строчку, вывести её на stdout, закрыть принудительно соединение.
telnet/nc делают персое и второе, но третье - закрытие соединения - не делают, остаются ждать ввода пользователя (или продолжения передачи с сервера).
Передавать серверу ничего не нужно, он сам отдаёт требуемую инфу. Если делать что-то типа echo close | telnet blablabla, то соединение закрывается до получения от сервера инфы.
Какие будут простые предложения (без написания своего хитрого но простого клиента)?
Изображение
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Получение данных по tcp соединению

Сообщение pcodr »

Известно сколько строк или может быть байт должен вернуть сервер?
Если одна строка, в голову приходит однострочник на perl:

Код: Выделить всё

perl -MIO::Socket::INET -e 'print IO::Socket::INET->new(PeerAddr => "127.0.0.1", PeerPort  => 5555)->getline'
remote system type is unix
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Получение данных по tcp соединению

Сообщение Frank »

Строка вроде бы одна. Запустил перловку твою - висит, ничего не выводит, не вываливается. Наверное ждёт, когда сервер закроет соединение.
Да, вот, вывалилось примерно через минуту, с искомым текстом плюс Operation timeout (Key)|$ForceMove... То есть, фактически, то же самое, что использовать телнет/нц.
Изображение
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Получение данных по tcp соединению

Сообщение pcodr »

Строка возвращаемая сервером заканчивается переводом строки?
remote system type is unix
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Получение данных по tcp соединению

Сообщение Frank »

Похоже, нет. Как я вычитал, в протоколе разделителями используются $ в начале и | в конце. Сервер передаёт несколько "строк" (похоже, ровно три) и ждёт от юзера таких же команд. По-хорошему, я должен был бы провести с сервером диалог согласно описанию протокола http://mydc.ru/topic915s40.html?p=7384 по секции "Взаимодействие пингер-хаб", но мне лениво делать такую заумную цепочку с расчётом ключа (левак сервак не жуёт, я проверил), и просить соответствующими командами закрыть соединение, поскольку всю инфу серваки отдают безо всяких команд, да и такое снятие инфы не фиксируется сервером, в отличии от пингеров :)
Вобщем, нужно, скажем, попринимать инфу секунд десять (с запасом на случай нагруженности) и оборвать связь.
UPD: посмотрел - не все хабы всю инфу выдают без передачи. HeXHub например не выдаёт количество юзеров. Неужто придётся заморачиваться написанием клиента...
Изображение
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Получение данных по tcp соединению

Сообщение pcodr »

Вобщем, нужно, скажем, попринимать инфу секунд десять (с запасом на случай нагруженности) и оборвать связь.


Такая загагулина вроде работает:

Код: Выделить всё

sh -c 'sh -c "sleep 10 && kill $$"& >/dev/null; exec nc 127.0.0.1 5555'
remote system type is unix
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Получение данных по tcp соединению

Сообщение Frank »

Чёт только раз сработало...
Изображение
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Получение данных по tcp соединению

Сообщение pcodr »

А на второй что произошло?
remote system type is unix
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: Получение данных по tcp соединению

Сообщение Frank »

frank@frank-desktop:/$ sh -c 'sh -c "sleep 10 && kill $$"& >/dev/null; exec nc fqc.org.ua 411'
$Lock EXTENDEDPROTOCOL_verlihub Pk=version0.9.8d-RC2|<VerliHub> This Hub Is Running Version 0.9.8d-RC2 (Thursday September 13 2007) of VerliHub[RunTime:6days 2hours ].[Current User Count:174].|<VerliHub> This hub is enhanced by plugman for Verlihub.|
frank@frank-desktop:/$ sh -c 'sh -c "sleep 10 && kill $$"& >/dev/null; exec nc oktyabrskoe.no-ip.org 411'
<~Hub-Security~> Âàø êëèåíò èìååò íåêîòîðûå âîçìîæíîñòè íåïîääåðæèâàåìûå õàáîì
Ïîæàëóéñòà ñêà÷àéòå ïîñëåäíþþ âåðñèþ DC++ ñ http://dcplusplus.sourceforge.net|<~Hub-Security~> Âû çàáàíåíû çà 0000-00-00 00:29:00|frank@frank-desktop:/$ kill: 1: No such process
Изображение
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Получение данных по tcp соединению

Сообщение pcodr »

У меня работает. Всё время выдаёт это
$Lock EXTENDEDPROTOCOL_HeXHub_TE_nejhnspmkfbr Pk=versiunea5.03|$HubName B.E.S.T.H.U.B. - ПРЕЖДЕ ВСЕГО, ОБЯЗАТЕЛЬНО НАБЕРИТЕ В ГЛАВНОМ ЧАТЕ КОМАНДУ /FAV ОБЯЗАТЕЛЬНО СО ЗНАЧКОМ / ВПЕРЕДИ|$HubTopic ПРЕЖДЕ ВСЕГО, ОБЯЗАТЕЛЬНО НАБЕРИТЕ В ГЛАВНОМ ЧАТЕ КОМАНДУ /FAV ОБЯЗАТЕЛЬНО СО ЗНАЧКОМ / ВПЕРЕДИ|<~Hub-Security~> HeXHub 5.03a Firewall 1.09 for more information write !about|

в кодировке windows-1251
Это на oktyabrskoe.no-ip.org 411
remote system type is unix
Спасибо сказали: