2010-03-25 3 views
9

HI,Дать телнет клиент

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

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

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

Пробовал ли кто-нибудь это, есть ли библиотека открытых источников для этого?

Благодаря

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

+0

Будет ли эта программа работать в Windows? Linux? Если окна, вы можете использовать winsock. В Linux вы могли бы использовать что-то эквивалентное. – Nate

+0

Связанный вопрос: «Использование telnet в программе C» http://stackoverflow.com/questions/202859/using-telnet-in-a-c-program – jfs

ответ

10

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

Code example:

#!/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() 
+2

На данный момент это, пожалуй, самый удобный способ продвижения вперед. Я устал от быстрого сценария, читая онлайн-документацию, и это работает! Теперь все, что мне нужно сделать, это изучить python, который не кажется таким уж трудным! Интересно, могу ли я общаться между python и другими C-программами? – MAC

2

This может быть полезно чтение для вас.

+0

Спасибо, что было полезно тоже! – MAC

2

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

+10

Изучение шпатлевки походило бы на чтение технических характеристик двигателя внутреннего сгорания, чтобы понять, как двигаться. То, что нужно MAC, - это простой пример сокетов и протокола Telnet. –

+1

Я бы сказал, что Putty - это ** SSH ** клиент ** для Windows **. –

4

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

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

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

+0

Правда, я пробовал некоторые, но сталкивался с проблемами. Поэтому я надеялся найти заранее построенную библиотеку. – MAC

+0

неверный, реальный протокол telnet намного сложнее (teerminal type, option negociation и т. Д. См. [RFC 854] (http://www.rfc-editor.org/rfc/rfc854.txt)). но подавляющее большинство плохо реализованных клиентов telnet - это простой сокет ASCII. –

+0

Хорошая точка; Однако я не думаю, что MAC должен беспокоиться о этих морщинах для своей цели. –

1

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

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

+0

Это разумная оценка! Приложение должно иметь две части, один из которых является центральным сервером, на котором фактически будет выполняться все управляющее приложение iPhone и iPhone, которое пользователи будут использовать для внесения изменений. Лично я опытен с технологиями microsoft, но я должен делать это с использованием технологий free/opensource. Поэтому я немного теряю, с чего начать. Мне нужно разоблачить этот api таким образом, который может быть использован приложением iphone. На мой взгляд, это что-то вроде web-сервиса. Я все еще не уверен, как я могу сделать один без .net =) – MAC

3

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

0

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

0

См. Параметры в вашем telnet-клиенте: в произвольном гнезде для прослушивания и нажмите escape] для входа в клиент.

telnet> help 
telnet> set ?