2010-03-25 61 views
9

HI,Viết ứng dụng khách telnet

Tôi có một giao diện telnet mà bạn có thể đăng nhập bằng tên người dùng và mật khẩu và sau đó điều khiển hoạt động của thiết bị.

Tôi phải viết chương trình C che giấu khía cạnh telnet từ máy khách và thay vào đó cung cấp giao diện cho người dùng điều khiển thiết bị.

Điều gì sẽ là một cách hay để tiếp tục. Tôi đã thử viết một chương trình socket đơn giản nhưng nó dừng lại ở dấu nhắc đăng nhập. Tôi đoán là tôi không tuân theo giao thức TCP.

Có ai đã thử điều này không, có thư viện nguồn mở nào để thực hiện việc này không?

Cảm ơn

Addition: Cuối cùng tôi muốn để lộ nó thông qua một trang web api/webservice. Nền tảng này là Linux.

+0

Chương trình này có chạy trên Windows không? Linux? Nếu cửa sổ, bạn có thể sử dụng winsock. Trên Linux bạn chắc chắn có thể sử dụng một cái gì đó tương đương. – Nate

+0

Câu hỏi liên quan: "Sử dụng telnet trong Chương trình C" http://stackoverflow.com/questions/202859/using-telnet-in-a-c-program – jfs

Trả lời

10

Nếu Python là một tùy chọn bạn có thể sử dụng 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

Hiện tại, đây có vẻ là cách thuận tiện nhất. Tôi mệt mỏi với một kịch bản nhanh bằng cách đọc tài liệu trực tuyến và nó hoạt động! Bây giờ tất cả những gì tôi phải làm là tìm hiểu python mà dường như không khó! Tôi tự hỏi liệu tôi có thể giao tiếp giữa chương trình python và các chương trình C khác không? – MAC

2

This có thể đọc hữu ích cho bạn.

+0

Cảm ơn điều đó cũng hữu ích! – MAC

2

Tải xuống mã nguồn Putty. Kiểm tra TELNET.C, phụ trợ Telnet cho Putty.

+10

Nghiên cứu Putty sẽ giống như đọc các thông số kỹ thuật cho động cơ đốt trong trong nỗ lực để hiểu cách lái xe. Những gì MAC cần là một ví dụ đơn giản về ổ cắm và giao thức Telnet. –

+1

Tôi muốn nói Putty là khách hàng ** ** ** ** cho Windows **. –

4

Giao thức của telnet khá đơn giản ... bạn chỉ cần tạo kết nối TCP và gửi và nhận dữ liệu ASCII. Nó khá là nhiều. Vì vậy, tất cả những gì bạn cần làm là tạo một chương trình kết nối qua TCP, sau đó đọc các ký tự từ ổ cắm TCP và phân tích nó để cập nhật GUI và/hoặc ghi ký tự vào socket để đáp ứng với điều khiển thao tác của người dùng trong GUI.

Cách bạn thực hiện điều đó phụ thuộc rất nhiều vào phần mềm bạn đang sử dụng để xây dựng giao diện của bạn. Về phía TCP, một vòng lặp sự kiện đơn giản xung quanh select() sẽ là đủ.

+0

Đúng, tôi đã thử một số nhưng đã gặp sự cố. Vì vậy, tôi đã hy vọng tìm thấy một thư viện được xây dựng trước. – MAC

+0

sai, giao thức telnet thực là cách phức tạp hơn (loại teerminal, tùy chọn phân ly, vv ... xem [RFC 854] (http://www.rfc-editor.org/rfc/rfc854.txt)). nhưng phần lớn các máy khách telnet được triển khai kém đều là socket ASCII đơn giản. –

+0

Điểm tốt; Tôi không nghĩ rằng MAC cần phải lo lắng về những nếp nhăn cho mục đích của mình, tuy nhiên. –

1

Trừ khi ứng dụng là tầm thường, một điểm khởi đầu tốt hơn là nên tìm ra cách bạn đang đi để tạo ra các giao diện đồ họa. Đây là một câu hỏi lớn hơn và sẽ có tác động nhiều hơn đến dự án của bạn hơn là chính xác bạn telnet vào thiết bị như thế nào. Bạn đề cập đến C lúc đầu, nhưng sau đó bắt đầu nói về Python, điều đó khiến tôi tin rằng bạn tương đối linh hoạt trong vấn đề này.

Khi bạn đã được đặt trên ngôn ngữ/nền tảng, sau đó tìm thư viện telnet - bạn sẽ tìm thấy thứ gì đó hợp lý đã được triển khai.

+0

Đó là một đánh giá hợp lý! Ứng dụng phải có hai phần, một là một máy chủ trung tâm thực sự sẽ thực hiện tất cả các ứng dụng giao diện điều khiển và dựa trên iPhone mà người dùng sẽ sử dụng để thực hiện thay đổi. Cá nhân tôi có kinh nghiệm với các công nghệ microsoft, nhưng tôi phải làm điều này bằng cách sử dụng các công nghệ miễn phí/mã nguồn mở. Do đó tôi đang ở phần nào của một mất mát như là nơi để bắt đầu. Tôi cần hiển thị api này theo cách có thể được ứng dụng iphone sử dụng. Trong tâm trí của tôi đó là một cái gì đó giống như một webservice. Tôi vẫn không chắc chắn làm thế nào tôi đi về làm cho một mà không có .net =) – MAC

3

Trong khi telnet gần như chỉ là một ổ cắm gắn với một thiết bị đầu cuối nó không phải là khá. Tôi tin rằng có thể có một số ký tự điều khiển được truyền ngay sau khi kết nối được thực hiện. Nếu thiết bị của bạn đang gửi một số dữ liệu kiểm soát không mong muốn thì nó có thể gây nhầm lẫn cho chương trình của bạn. Nếu bạn chưa có, hãy tải xuống wireshark (hoặc tshark hoặc tcpdump) và theo dõi kết nối của bạn. Wireshark (trước đây là ethereal) là nền tảng chéo và khá dễ sử dụng cho những thứ đơn giản. Lọc với tcp.port == 23

0

Kiểm tra mã nguồn here. Nó đã giúp tôi ra rất nhiều trong việc hiểu giao thức Telnet.

0

Xem các tùy chọn trong ứng dụng khách telnet của bạn: trên ổ cắm nghe tùy ý và nhấn escape] để vào máy khách.

telnet> help 
telnet> set ? 
Các vấn đề liên quan