Привет,
У меня есть устройство, которое выставляет интерфейс telnet, который можно войти в использование имени пользователя и пароля и затем управлять работой устройства.
Я должен записать программу C, которая скрывает аспект telnet от клиента и вместо этого предоставляет интерфейс пользователю для управления устройством.
Каков был бы хороший способ продолжиться. Я пытался писать простую программу сокета, но она останавливается при приглашении ко входу в систему. Мое предположение - то, что я не следую протоколу TCP.
Кто-либо делал попытку этого, есть ли библиотека с открытым исходным кодом там, чтобы сделать это?
Спасибо
Дополнение: В конечном счете я хочу выставить его через веб-API/веб-сервис. Платформой является Linux.
Если 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()
Если приложение не является тривиальным, лучшей отправной точкой было бы выяснить, как вы собираетесь создать графический интерфейс. Это более серьезный вопрос, и он будет иметь большее влияние на ваш проект, чем то, как именно вы подключитесь к устройству через telnet. Вы сначала упоминаете C, но затем начинаете говорить о Python, что заставляет меня думать, что вы относительно гибки в этом вопросе.
После того, как вы выбрали язык / платформу, поищите библиотеку telnet - вы должны найти что-то разумное, уже реализованное.
Я действительно считаю Руководство Биджа по сетевому программированию хорошим введением в сетевое программирование на C.
Скачайте Putty исходный код. Изучите TELNET.C, бэкэнд Telnet для Putty.
Протокол telnet довольно прост ... вы просто создаете TCP-соединение и отправляете и получаете данные ASCII. Это почти все.
Все, что вам действительно нужно сделать, это создать программу, которая подключается через TCP, затем считывает символы из TCP-сокета и анализирует их для обновления графического интерфейса пользователя и / или записывает символы в сокет в ответ на действия пользователя, управляющие элементами управления в графический интерфейс.
Как вы это реализуете, во многом зависит от того, какое программное обеспечение вы используете для создания своего интерфейса. На стороне TCP достаточно простого цикла событий вокруг select ().
Хотя telnet - это почти просто сокет, привязанный к терминалу, это не совсем так. Я полагаю, что могут быть некоторые управляющие символы, которые передаются вскоре после установления соединения. Если ваше устройство посылает неожиданные управляющие данные, то это может сбить с толку вашу программу. Если вы еще этого не сделали, скачайте программу wireshark (или tshark, или tcpdump) и понаблюдайте за своим соединением. Wireshark (ранее ethereal) является кроссплатформенной программой и довольно проста в использовании для простых вещей. Фильтр с tcp.port == 23
Ознакомьтесь с исходным кодом здесь . Это очень помогло мне в понимании протокола Telnet.