Написание клиента Telnet - PullRequest
       12

Написание клиента Telnet

9 голосов
/ 26 марта 2010

HI

У меня есть устройство, которое предоставляет интерфейс telnet, в который вы можете войти, используя имя пользователя и пароль, а затем управлять работой устройства.

Мне нужно написать программу на C, которая скрывает аспект telnet от клиента и вместо этого предоставляет пользователю интерфейс для управления устройством.

Какой хороший способ продолжить. Я попытался написать простую программу для сокетов, но она останавливается при входе в систему. Я предполагаю, что я не следую протоколу TCP.

Кто-нибудь пытался это сделать, есть ли библиотека с открытым исходным кодом для этого?

Спасибо

Дополнение: В конце концов я хочу выставить его через веб-API / веб-сервис. Платформа Linux.

Ответы [ 9 ]

10 голосов
/ 26 марта 2010

Если Python является опцией, вы можете использовать telnetlib .

Пример кода :

#!/usr/bin/env python
import getpass
import sys
import telnetlib

HOST = "localhost"
user = raw_input("Enter your remote account: ")
password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ")
tn.write(user + "\n")
if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("ls\n")
tn.write("exit\n")

print tn.read_all()
4 голосов
/ 26 марта 2010

протокол telnet довольно прост ... вы просто создаете TCP-соединение и отправляете и получаете данные ASCII. Вот и все.

Таким образом, все, что вам действительно нужно сделать, это создать программу, которая соединяется через TCP, затем читает символы из сокета TCP и анализирует его для обновления графического интерфейса и / или записывает символы в сокет в ответ на действия пользователя по управлению элементами управления. GUI.

Способ реализации зависит от того, какое программное обеспечение вы используете для создания интерфейса. На стороне TCP будет достаточно простого цикла обработки событий вокруг select ().

3 голосов
/ 26 марта 2010

Хотя telnet - это почти просто сокет, привязанный к терминалу, это не совсем так. Я считаю, что могут быть некоторые управляющие символы, которые передаются вскоре после установления соединения. Если ваше устройство отправляет неожиданные данные управления, это может сбить вашу программу с толку. Если вы этого еще не сделали, загрузите wireshark (или tshark или tcpdump) и следите за своим соединением. Wireshark (ранее эфирный) является кроссплатформенным и довольно простым в использовании для простых вещей. Фильтр с tcp.port == 23

2 голосов
/ 26 марта 2010

Я действительно считаю Руководство Биджа по сетевому программированию хорошим введением в сетевое программирование на языке C.

2 голосов
/ 26 марта 2010

Скачать Замазка исходный код. Изучите TELNET.C, бэкэнд Telnet для Putty.

2 голосов
/ 26 марта 2010

Это может быть полезно для чтения.

1 голос
/ 26 марта 2010

Если приложение не является тривиальным, лучшей отправной точкой было бы выяснить, как вы собираетесь создавать графический интерфейс. Это более важный вопрос, и он будет иметь большее влияние на ваш проект, чем на то, как именно вы подключитесь к устройству. Сначала вы упоминаете C, но потом начинаете говорить о Python, что заставляет меня поверить, что вы относительно гибки в этом вопросе.

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

0 голосов
/ 12 марта 2014

Просмотрите параметры в своем клиенте telnet: в произвольном сокете прослушивания и нажмите escape], чтобы войти в клиент.

telnet> help
telnet> set ?
0 голосов
/ 18 июня 2010

Проверьте исходный код здесь .Это помогло мне много в понимании протокола Telnet.

...