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

  • Автор темы Автор темы Enigma
  • Дата начала Дата начала

Enigma

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

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

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

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


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

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

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

Мне у разработчика очень неловко спрашивать такие очевидные моменты! Потому что тут явно подразумевается что-то мега-очевидное :-)
Зато здесь на форуме обнажить свое невежество и спросить вашего совета - самое то :D
Помогите, братцы! :az:
 
порт для управления 9900
Вероятнее всего, имелся ввиду обычный get запрос, с постановкой параметров в url.
Можно ещё предположить про post, но такой способ только усложняет работу и не в предпочтительных у разработчиков.

127.0.0.1:9900
 
Последнее редактирование:
  • Спасибо
Реакции: Enigma и doc
Я пробовал ввести в браузере запрос вида http://127.0.0.1:9900/?1 , но софт просто вылетает

Есть еще идейки?:)
 
  • Спасибо
Реакции: Enigma
Уточнил. Ответ дословно: протокол - 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~")

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

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

Объясню, зачем мне все это нужно. Программа, о которой идет речь - локальный сокс-клиент, довольно неплохой и удобный. Там есть команды выбора гео, взятия сокса и т.д. Очень хочется подружить сокс-клиент с зенно.
 
Уточнил. Ответ дословно: протокол - 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
  • Спасибо
Реакции: Enigma
Если простой, то так. :bn:
https://www.codeproject.com/Articles/19071/Quick-tool-A-minimalistic-Telnet-library
Остальное, какой-то изврат, через батник, скрипты и т.д.

Насчет изврата Вы абсолютно правы, сам чувствую, что несет не в ту степь :)
Насчет библиотеки интересная мысль, а как подобные библиотеки с Зенно дружить? Там же вроде только .dll можно подключать?
 
Не тестил, но по логике должно быть так:
Здесь поменять 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
А 127.0.0.1:9900 здесь куда вписать?

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

// создание подключение где hostname: имя хоста, 23 - номер порта
TelnetConnection tc = new TelnetConnection("hostname", 23);
 
Попробовал вызвать 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]

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

Решил открыть темку с просьбой сделать сниппет за оплату
 
Возможно нужно через Proxifier ставить порт проксю и уже слать команды.
 
  • Спасибо
Реакции: Enigma
Не совсем понял, что подразумевается. Как это может выглядеть, можно подробнее раскрыть мысль? Система должна полностью соксифицироваться?
 
Своими силами тут явно было не обойтись :) Пришлось заказывать платный сниппет, но оно того стоит, все же тут не обойтись одними примерами из гугла, надо еще понимать принцип работы и мыслить как настоящий кодер.

Всем большое спасибо за помощь! Вот правда, я прям очень благодарен всем отписавшимся!
Спасибо, что не оставили меня один на один с проблемой! :az:
 
  • Спасибо
Реакции: bizzon и Koqpe
Если не секрет, то какой порядок цен на решение и как выбрать того, кто может написать?
 
Порядок цен явно будет напрямую зависеть от сложности. Моя задача обошлась мне в 50$. Заказывал у этого замечательного человека, вот его тема.
 
  • Спасибо
Реакции: bizzon

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