Хочу приделать график статистики для dc++ серверов.
Задача: подключившись к серверу, получить от него строчку, вывести её на stdout, закрыть принудительно соединение.
telnet/nc делают персое и второе, но третье - закрытие соединения - не делают, остаются ждать ввода пользователя (или продолжения передачи с сервера).
Передавать серверу ничего не нужно, он сам отдаёт требуемую инфу. Если делать что-то типа echo close | telnet blablabla, то соединение закрывается до получения от сервера инфы.
Какие будут простые предложения (без написания своего хитрого но простого клиента)?
Получение данных по tcp соединению
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 283
- ОС: Debian
Re: Получение данных по tcp соединению
Известно сколько строк или может быть байт должен вернуть сервер?
Если одна строка, в голову приходит однострочник на perl:
Если одна строка, в голову приходит однострочник на perl:
Код: Выделить всё
perl -MIO::Socket::INET -e 'print IO::Socket::INET->new(PeerAddr => "127.0.0.1", PeerPort => 5555)->getline'
remote system type is unix
-
- Сообщения: 1059
- ОС: Ubuntu, Debian
Re: Получение данных по tcp соединению
Строка вроде бы одна. Запустил перловку твою - висит, ничего не выводит, не вываливается. Наверное ждёт, когда сервер закроет соединение.
Да, вот, вывалилось примерно через минуту, с искомым текстом плюс Operation timeout (Key)|$ForceMove... То есть, фактически, то же самое, что использовать телнет/нц.
Да, вот, вывалилось примерно через минуту, с искомым текстом плюс Operation timeout (Key)|$ForceMove... То есть, фактически, то же самое, что использовать телнет/нц.

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

Вобщем, нужно, скажем, попринимать инфу секунд десять (с запасом на случай нагруженности) и оборвать связь.
UPD: посмотрел - не все хабы всю инфу выдают без передачи. HeXHub например не выдаёт количество юзеров. Неужто придётся заморачиваться написанием клиента...

-
- Сообщения: 283
- ОС: Debian
Re: Получение данных по tcp соединению
Вобщем, нужно, скажем, попринимать инфу секунд десять (с запасом на случай нагруженности) и оборвать связь.
Такая загагулина вроде работает:
Код: Выделить всё
sh -c 'sh -c "sleep 10 && kill $$"& >/dev/null; exec nc 127.0.0.1 5555'
remote system type is unix
-
- Сообщения: 1059
- ОС: Ubuntu, Debian
-
- Сообщения: 283
- ОС: Debian
-
- Сообщения: 1059
- ОС: Ubuntu, Debian
Re: Получение данных по tcp соединению
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
$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

-
- Сообщения: 283
- ОС: Debian
Re: Получение данных по tcp соединению
У меня работает. Всё время выдаёт это
в кодировке windows-1251
Это на oktyabrskoe.no-ip.org 411
$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