Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Протокол Telnet на Qt

А какие есть средства для работы с Telnet-ом на Qt. Там идут служебные коды, типа "яэяэяэ!яыяы", можно посылать что-то такое же, но это неправильно!
Ответ:
Действительно все просто, только не понятно зачем. Спасибо!
Вопрос: Реализация telnet в c++

Windows XP MS VS C++ 2008 Express Edition
Wiki и MSDN читал

Внесите ясность
Если это протокол, то у него какие-то свои запросы, на чем реализуется telnet в с++

Только через сокеты, т.е. реализация аналогична, например, smtp? Тогда какой запрос посылается в send?

Или можно реализовывать через API, тогда через какую ф-ю и какие библиотеки нужно подключить, в msdn нашел 

И чтобы админинистраторские права были не нужны
Ответ:
Цитата(Luchi @  8.3.2013,  01:30 )
Wiki и MSDN читал

По какому поводу?))) Интересно, Вы когда-нибудь работали с утилитой telnet? Она позволяет удалённо подключиться к узлу Интернет в терминальном режиме (если, конечно, на той стороне поднят сервер telnet).

Цитата(Luchi @  8.3.2013,  01:30 )
Если это протокол

Это .

Цитата(Luchi @  8.3.2013,  01:30 )
у него какие-то свои запросы

Запросов как таковых нет. Есть два слоя приёма/передачи - приём/передача непосредственно данных (например, передача команды для командного процессора на удалённой стороне и приём результатов выполнения этой команды) и (очень важно)  (иными словами, специальных эскейп-последовательностей, которые могут быть короткими, а могут быть и длинными).

В момент установления (да и во время самого соединения это может произойти) telnet-соединения клиент и сервер договариваются об опциях соединения (целый набор кодов опций, плюс аж 4 категории отношений - "я хочу", "я не буду", "он хочет", "он не будет", в некоторых случаях могущие приобретать императивный оттенок; они достаточно однотипные, но повозится с ними придётся).

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

Цитата(Luchi @  8.3.2013,  01:30 )
Только через сокеты, т.е. реализация аналогична, например, smtp?

Да, только через сокеты, connect, send, recv etc.

Цитата(Luchi @  8.3.2013,  01:30 )
Или можно реализовывать через API, тогда через какую ф-ю и какие библиотеки нужно подключить

Можно поискать в сети специализированные библиотеки, реализующие протокол telnet, чтобы самому с ним не возиться. , . А можно реализовать самому, это даже интересней.
Вопрос: Подключение к АТС по протоколу smdr

Приветствую
подскажите как подключиться к АТС по протоколу smdr из дельфи? putty подключается, а в дельфи делаю:
Mysocket := TClientSocket.Create(nil);
    Mysocket.Address := '192.168.0.101';
    Mysocket.Port := 23;
    Mysocket.OnRead := ClientSocket1Read;
    Mysocket.OnError := ClientSocket1Error;
    Mysocket.Active := true;

    cmd.Clear;
    cmd.Add('user smdr');
    cmd.Add('pass PCCSMDR');
    cmd.Add('');
    Mysocket.Socket.SendText(asterisk_cmd.text);

не ошибок не выводит и ни каких ответов нет
Ответ: putty подключается по любому из протоколов (если telnet то только пассивный режим)
по telnet пробовал, идет коннект и сразу разъединение не логин не пароль не успеваю ввести (скорей всего что то не так делаю, с telnet не работал)
Вопрос: Telnet NTLM Authentication. Нужно описание. Как работает этот тип аутентификации?

Не смог найти ничего по telnet ntlm типе аутентификации. В rfc к telnet протоколу написано, что ntlm не входит в стандарты интернета. Есть ли там шифрование, какое оно, вообще как производить аутентификацию ntlm? Нужен именно он, т.к. MSWindows 7 telnet сервер работает на нём.
Ответ: Алилуя, он мне не нужен! К авторизации не допускало отклонение опции NEW-ENVIROMANT. AUTH? Да кому какое дело теперь до AUTH! До авторизации и без него можно дойти.
Вопрос: Telnet Broken pipe

Python
1
2
3
4
5
6
7
8
9
10
11
12
telnet = Telnet("192.168.56.101")
telnet.read_until("login: \r\n".encode('ascii'))
telnet.write("code\r\n".encode('ascii'))
telnet.read_until("Password: \r\n".encode('ascii'))
telnet.write("12345qwe\r\n".encode('ascii'))
 
while 1:
    command = input("[shell]: ")
    telnet.write((command).encode('ascii'))
    if command == "exit":
        break
    telnet.read_all()
После ввода command получаю следующее

Traceback (most recent call last):
File "/home/code/Рабочий стол/test.py", line 12, in <module>
telnet.write((command).encode('ascii'))
File "/usr/lib/python3.4/telnetlib.py", line 292, in write
self.sock.sendall(buffer)
BrokenPipeError: [Errno 32] Broken pipe

В чём может быть проблема?
Ответ: 42.
Вопрос: Подключение по Telnet с подбором пароля

Доброго времени суток! Ситуация такая, имеется несколько железок, на них заведен один username но с разными паролями (да, вот так вот через ж.. сделано, но как говорят "отцы" сети - это традиция ) Хочется реализовать подключение по такому плану: пробуем подключится по telnet с паролем1, если не получилось - то с паролем2 и т.д. На TCL я делал все через expect:
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
array set PASSWD {
1 "pass1\r"
2 "pass2\r"
3 "pass3\r"
}
 
set fails 1
 
spawn telnet $HOST
expect {
    eof {
        send_user "Unexpected end a telnet session to the host $HOST: while connecting"
        exit 1
    }
    "Username:" {
        send "$LOGIN"
        exp_continue
    }
    "Password:" {
        send "$PASSWD($fails)"
    send_user "$PASSWD($fails)"
        exp_continue
    }
    "ail" {
        if {$fails >= 3} {
            send_user "\nToo many failure loggings to the host $HOST"
            exit 1
        } else {
            incr fails
            send_user "\nBad login/password on the host $HOST"
            exp_continue
        }
    }
    -re {\w+>} {
        send "\r"
    }
    timeout {
            send_user "Timeout of a telnet session to host $HOST: while connecting"
            exit 1
    }
}

А вот как сделать на питоне и покрасивее - не могу придумать. Буду рад советам.

Добавлено через 2 часа 20 минут
Вообщем пока получилось следующее:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#Подключение по Telnet
def TelnetConnection(_ip):
    Username = 'admin' #логин
    Passwords = ['pass1', 'pass2', 'pass3'] #пароли
    
    tCon = telnetlib.Telnet(_ip, 23, 15) #устанавливаем telnet сессию
    for i in range(len(Passwords)): #просматриваем массив с паролями
        tCon.read_until('Username:') #ждем предложение ввода имени пользователя
        tCon.write(str(Username) + '\n') #вводим логин
        tCon.read_until('Password:') #ждем предложение ввода пароля
        tCon.write(str(Passwords[i]) + '\n') #вводим пароль
                #по умолчанию ждем неправильный пароль (5 сек)
        temp = tCon.expect(['Error: Failed to authenticate.', 'Error: Authentication fail'], 5) 
        err = re.search('Error', str(temp)) #ищем в буфере сообщение об ошибке
        if err: #если есть ошибка
            print 'Error: Authentication fail'
            continue #продолжаем цикл
        else:  #если нет сообщения об ошибке
            print 'Authentication ok'
            #здесь уже можно отправить команду  
            break #выходим из цикла
    
    tCon.close() #отключаем
Кол-во попыток авторизации ограничено числом возможных паролей (нужно бы конечно жестко указать кол-во попыток, но в моем случае паролей не будет много, а следовательно и попыток).
Пароли хранить в листинге скрипта плохое решение, но на железках есть ACLи.
Повторюсь, буду рад советам
Ответ: Jabbson, спасибо
Вопрос: Запрос к HTTP серверу через браузер и telnet

Есть простой самописный HTTP сервер, который слушает коннекты по определённому порту х. Нужно:
1. чтобы этот сервер, возвращал клиенту текстовую информацию в браузере, если клиент ввел в строке браузера адрес сервера:порт(х).
2. чтобы эта же текстовая информация приходила клиенту, если он ввел в ком. строке - telnet адресс порт(х). И больше ничего.

Получается реализовать каждую задачу по отдельности. Но не выходит соединить их воедино, поскольку сталкиваемся с противоречием, а именно:
Через браузер от клиента приходит GET запрос. На сервере есть обработчик входящих подключений, который получает запрос, читает его, парсит, понимает что это GET, и соотв. отправляет данные.
А во втором случае нужно получить те же данные, не отправляя никакого запроса. Тоесть просто открыв телнет подключение командой, получить данные и сразу же его закрыть.
Клиентской части ПО тоже быть не должно.

Есть ли способ одновременно на одном и том же порту получать данные через браузер и через telnet? Как понять что это именно запрос с telnet-a, а не с браузера, не читая его?
Если это возможно, то как должно работать в теории?
Ответ: Может сервер нужно реализовать совсем по другому?
Я тоже уже было решил, что невозможно соединить эти 2 задачи. Но есть программа Percona XtraDB Cluster. У них эта задача реализована. Эта программа является решением для различных задач кластеризации MySQL серверов. Устанавливается только на серверную часть, после чего с любого ПК с сети можно ввести ип адресс и порт либо с браузера, либо из телнета и получить текстовый ответ о статусе кластера.

Добавлено через 19 часов 47 минут
Разобрался, вы были правы.
Разобрал исходники программы от Percona, там просто реальзовано ввиде двух отдельных програм (отдельнфй класс на питоне, и отдельно скрипт на shell).
Вопрос: Проверить доступность ftp через макрос с telnet

Добрый день всем!!!

Нужна помощь в реализации проверки соединения Ексель с ftp.
Использовал такой код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public Function Ping(ByVal ComputerName As String) As Boolean
    Dim oPingResult As Variant
    For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
        ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "'")
        If IsObject(oPingResult) Then
            If oPingResult.StatusCode = 0 Then
                Ping = True
                Exit Function
            End If
        End If
    Next
End Function
и такой

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function Ping2(ByVal Host As String) As Boolean
    Dim WS As Object, rKey As String
    rKey = "HKCU\Environment\Ok"
 
    Set WS = CreateObject("WScript.Shell")
    On Error Resume Next
    WS.RegDelete (rKey)
    WS.Run "cmd /c (Ping -n 1 " & Host & "|FindStr ""TTL=""&&(reg add " & rKey & "))", 0, True
    On Error GoTo Fail
    WS.RegRead (rKey)
    WS.RegDelete (rKey)
    Ping2 = True: Exit Function
Fail:
End Function
в обоих случаях пинга нет, но при етом через проводник или браузер пользователь успешно может зайти
в чем причина ? і как ее можно решить?

а, і еще адин сказал использовать telnet.
через cmd строкой "o [хост] [порт] " получилось

как реализовать проверку соединения через telnet?
спасибо за помощь))))
Ответ:
Сообщение от IvanOK
в обоих случаях пинга нет, но при етом через проводник или браузер пользователь успешно может зайти
в чем причина ? і как ее можно решить?
Так, в том то, и дело что через браузер все работает
А через вба нет
Вопрос: Связь TelNet c БД

Можно ли связать TelNet c приложением, чтобы при вводе команды в TelNet (sh mac-address-table vlan 2019) нужная мне информация заносилась БД, и как это сделать. Или это достаточно сложно? Спасибо за помощь.
Ответ: телнет просто передает кому-то, кто слушает какой-то порт, некий текст

соответственно ничего не мешает при приеме текста "убей всех" вашей программе пойти и убить всех
для этого достаточно просто сделать TCP сервер, слушающий порт
Вопрос: Программа , взаимодействующая с telnet на сокетах

Привет всем! Я новичок в сетевом программировании, возникла задача подключаться к telnet`у с помощью программы на c++ и выполнять команды, пробовал забивать команды через system(), но особых результатов не достиг, в итоге увидел где-то, что это можно сделать с помощью библиотеки winsock , появился резонный вопрос: как? Себе это представляю следующим образом: 1)подключаемся на 23 порт. 2)через send() пишем нужную нам команду. Но что-то я сомневаюсь, что это так работает. Скажите , прав я или нет и если нет, объясните на пальцах что нужно сделать чтоб реализовать все это. Пожалуйста, не нужно скидывать решения на VB и так далее, я хочу понять реализацию именно на c++.
Ответ: Из исходников в сети, мне попадался Putty, и еще один не помню точно где. Смотря для каких целей надо.