Как правильно отправлять команды через порт?

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Мне тут понадобилось автоматизировать одно десктопное приложение, ломаю голову уже который день.
Без особой надежды связался с разработчиком этого приложения через форму обратной связи и спросил его, есть ли возможность как-то управлять его софтом через какие-нибудь команды. Чтобы, так сказать, не по координатам-кликам все делать, а хоть как-то облегчить это дело.

Я не ожидал, что он ответит, но он мне ответил! Цитирую как есть:

порт для управления 9900 - скрипт/прога/чтоугодно должен по локалхосту коннектится на него и слать комманды
комманды крайне желательно давать последовательно так как клиент эмулирует работу пользователя в GUI. там есть контроль запрета на паралельное выполнение, но всё же дополнительно со стороны сервера не помешает также...
скрипт ОБЯЗАТЕЛЬНО должен дождаться ответа обработки запроса - OK или ERROR
также - EXPRD если акк больше не работает
и OFULL если достигнут серверный лимит одновременно используемых

Далее он описал сами команды, например:
3 - выстроить список
1 - удалить


и т.д., далее текст различных команд

И тут мне стало стыдно! :D Я не понимаю, как это теперь использовать на практике? ----> >порт для управления 9900 - скрипт/прога/чтоугодно должен по локалхосту коннектится на него и слать комманды

Как посылать нужные команды (особенно в связке с зенно?). Через командную строку, наверное? Но как правильно это сделать? Гуглил, но не нашел, да и не факт, что искал по теме...

Мне у разработчика очень неловко спрашивать такие очевидные моменты! Потому что тут явно подразумевается что-то мега-очевидное :-)
Зато здесь на форуме обнажить свое невежество и спросить вашего совета - самое то :D
Помогите, братцы! :az:
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 368
Благодарностей
3 293
Баллы
113
порт для управления 9900
Вероятнее всего, имелся ввиду обычный get запрос, с постановкой параметров в url.
Можно ещё предположить про post, но такой способ только усложняет работу и не в предпочтительных у разработчиков.

127.0.0.1:9900
 
Последнее редактирование:
  • Спасибо
Реакции: Enigma и doc

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Я пробовал ввести в браузере запрос вида http://127.0.0.1:9900/?1 , но софт просто вылетает

Есть еще идейки?:-)
 

woober

Client
Регистрация
07.04.2015
Сообщения
211
Благодарностей
123
Баллы
43
  • Спасибо
Реакции: Enigma

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 368
Благодарностей
3 293
Баллы
113
  • Спасибо
Реакции: Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Уточнил. Ответ дословно: протокол - telnet / RAW binary

Если подключиться через telnet и руками выполнять те команды, которые были даны - действительно все работает. Вот только как теперь без костылей подружить это дело с зеннопостером - я пока не могу понять.

Насколько я понимаю, напрямую выполнить команду в телнете через батник не получится, т.к. батник может лишь открыть соединение по указанному порту ( telnet 127.0.0.1 9900 )
Пробовал через .vbs (так советуют в гугле) , таким вот образом:

set my = WScript.CreateObject("WScript.Shell")
my.run("C:\Windows\System32\cmd.exe")
WScript.Sleep 1000
my.SendKeys("telnet 127.0.0.1 9900~")
WScript.Sleep 1000
my.SendKeys("3~")
WScript.Sleep 1000
my.SendKeys("q~")

Но поскольку этот скрипт эмулирует ручной ввод в терминале, то это уже какой-то костыль получается, т.к. его выполнение легко сбить смещением фокуса.

Должно быть что-то очень простое для выполнения команды, но пока не пойму, как все упростить.

Объясню, зачем мне все это нужно. Программа, о которой идет речь - локальный сокс-клиент, довольно неплохой и удобный. Там есть команды выбора гео, взятия сокса и т.д. Очень хочется подружить сокс-клиент с зенно.
 

woober

Client
Регистрация
07.04.2015
Сообщения
211
Благодарностей
123
Баллы
43
Уточнил. Ответ дословно: протокол - telnet / RAW binary

Если подключиться через telnet и руками выполнять те команды, которые были даны - действительно все работает. Вот только как теперь без костылей подружить это дело с зеннопостером - я пока не могу понять.

Насколько я понимаю, напрямую выполнить команду в телнете через батник не получится, т.к. батник может лишь открыть соединение по указанному порту ( telnet 127.0.0.1 9900 )
Пробовал через .vbs (так советуют в гугле) , таким вот образом:

set my = WScript.CreateObject("WScript.Shell")
my.run("C:\Windows\System32\cmd.exe")
WScript.Sleep 1000
my.SendKeys("telnet 127.0.0.1 9900~")
WScript.Sleep 1000
my.SendKeys("3~")
WScript.Sleep 1000
my.SendKeys("q~")

Но поскольку этот скрипт эмулирует ручной ввод в терминале, то это уже какой-то костыль получается, т.к. его выполнение легко сбить смещением фокуса.

Должно быть что-то очень простое для выполнения команды, но пока не пойму, как все упростить.

Объясню, зачем мне все это нужно. Программа, о которой идет речь - локальный сокс-клиент, довольно неплохой и удобный. Там есть команды выбора гео, взятия сокса и т.д. Очень хочется подружить сокс-клиент с зенно.
https://www.google.com/search?q=tcp+send+command+c#&oq=tcp+send+command+c#
 
  • Спасибо
Реакции: Enigma

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 368
Благодарностей
3 293
Баллы
113
  • Спасибо
Реакции: Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Если простой, то так. :bn:
https://www.codeproject.com/Articles/19071/Quick-tool-A-minimalistic-Telnet-library
Остальное, какой-то изврат, через батник, скрипты и т.д.
Насчет изврата Вы абсолютно правы, сам чувствую, что несет не в ту степь :-)
Насчет библиотеки интересная мысль, а как подобные библиотеки с Зенно дружить? Там же вроде только .dll можно подключать?
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 368
Благодарностей
3 293
Баллы
113
Не тестил, но по логике должно быть так:
Здесь поменять root, rootpassword, gobelijn и 23
C#:
//create a new telnet connection to hostname "gobelijn" on port "23"
TelnetConnection tc = new TelnetConnection("gobelijn", 23);
string s = tc.Login("root", "rootpassword",100);
project.SendWarningToLog(s);

// server output should end with "$" or ">", otherwise the connection failed
string prompt = s.TrimEnd();
prompt = s.Substring(prompt.Length -1,1);
if (prompt != "$" && prompt != ">" )
    throw new Exception("Connection failed");
Должно вывести в лог, ответ программы, telnet'а и т.д.:
C#:
project.SendWarningToLog(tc.Read());
C#:
tc.WriteLine("команда"); // Отправить команду
project.SendWarningToLog(tc.Read()); // Вывести ответ
tc.WriteLine("exit"); // в конце сниппета
Как-то так.:bw:
 
Последнее редактирование:
  • Спасибо
Реакции: Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
А 127.0.0.1:9900 здесь куда вписать?

Наверное, в самое начало вот это надо, да?

// создание подключение где hostname: имя хоста, 23 - номер порта
TelnetConnection tc = new TelnetConnection("hostname", 23);
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Попробовал вызвать TelnetConnection, но у меня теперь такая ругань:

Ошибка в действии "CS0246" "The type or namespace name 'TelnetConnection' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 0; Cтолбец: 1]

Решение где-то на поверхности, но у меня не хватает квалификации его нащупать.

Решил открыть темку с просьбой сделать сниппет за оплату
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 650
Благодарностей
653
Баллы
113
Возможно нужно через Proxifier ставить порт проксю и уже слать команды.
 
  • Спасибо
Реакции: Enigma

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Не совсем понял, что подразумевается. Как это может выглядеть, можно подробнее раскрыть мысль? Система должна полностью соксифицироваться?
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Своими силами тут явно было не обойтись :-) Пришлось заказывать платный сниппет, но оно того стоит, все же тут не обойтись одними примерами из гугла, надо еще понимать принцип работы и мыслить как настоящий кодер.

Всем большое спасибо за помощь! Вот правда, я прям очень благодарен всем отписавшимся!
Спасибо, что не оставили меня один на один с проблемой! :az:
 
  • Спасибо
Реакции: bizzon и Koqpe

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 088
Благодарностей
126
Баллы
63
Если не секрет, то какой порядок цен на решение и как выбрать того, кто может написать?
 

Enigma

Client
Регистрация
16.06.2017
Сообщения
187
Благодарностей
31
Баллы
28
Порядок цен явно будет напрямую зависеть от сложности. Моя задача обошлась мне в 50$. Заказывал у этого замечательного человека, вот его тема.
 
  • Спасибо
Реакции: bizzon

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)