Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Chương trình Telnet viết bằng C/C++ trên Linux

  1. #1
    Ngày gia nhập
    01 2015
    Bài viết
    2

    Mặc định Chương trình Telnet viết bằng C/C++ trên Linux

    Xin chào! Cho em hỏi có ai biết cách viết Telnet client bằng C/C++ trên Linux ko ạ?
    Ví dụ: có 1 thiết bị, có thể kết nối từ máy tính bằng giao thức telnet, login, gõ từng lệnh và nhận kết quả trả về.
    Bây giờ muốn viết chương trình để thay vì gõ từng lệnh, có thể chọn chức năng để chương trình gửi lệnh tương ứng
    và hiện ra kết quả thì làm thế nào, có khả thi không?
    "You fail to warp because you are warp scrambled."

  2. #2
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,760

    Bạn lấy telnet-source của linux về xem và phát triển thêm đc mà
    Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.
    Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.

  3. #3
    Ngày gia nhập
    01 2015
    Bài viết
    2

    Em đã thử viết một chương trình socket client đơn giản, sử dụng port 23 (telnet), gặp mấy vấn đề sau:
    - Khi kết nối thành công, server sẽ trả về một đoạn thông báo yêu cầu LOGIN. Nhưng khi chạy chương trình, nếu read buffer ngay sau khi kết nối, sẽ nhận được một khoảng trắng hoặc k*ý tự đặc biệt. Tạm ngừng để đợi bằng lệnh Sleep trước khi lấy thông tin thì ok, nhận được đúng thông báo, nhưng Sleep(1) là 1/1000 giây mà chương trình lag hẳn, độ trễ có lẽ phải ~1 giây, thua xa chương trình telnet cài trên terminal (hay cmd của windows)
    - Nhập lệnh một cách thủ công, không có vấn đề gì
    Code:
    void sendcmd(int sockfd)
    {
        int n;
        char sendbuff[256];
        memset(sendbuff, 0, 256);
        fgets(sendbuff,255,stdin);
        n = write(sockfd,sendbuff,strlen(sendbuff));
        if (n<0)
        error("ERROR reading from socket");
    }
    - Sửa lại để "tự động hóa":
    Code:
    void sendcmd(int sockfd, char sendbuff[256])
    {
        int n;
        n = write(sockfd,sendbuff,strlen(sendbuff));
        if (n<0)
        error("ERROR reading from socket");
    }
    sendcmd(sockfd,"comtech"); // login
    sendcmd(sockfd,"comtech"); // password
    sendcmd(sockfd,"<0/TFQ?"); // hỏi tham số TFQ bằng bao nhiêu
    Tự động đăng nhập theo các bước:

    - Khởi tạo socket
    - Kết nối
    - In ra dòng thông báo kết nối thành công, yêu cầu đăng nhập (cái này là trả về từ server)
    - Gửi login
    - Nhận, in ra thông báo trả về
    - Gửi password
    - Nhận, in ra thông báo trả về, được "comtechcomtech"

    Thay vì như sau (nhập lệnh thủ công)


    Em nghĩ có vấn đề gì đó trong xử lý string.
    Đã được chỉnh sửa lần cuối bởi Warp Scrambler : 13-01-2015 lúc 11:17 AM.
    "You fail to warp because you are warp scrambled."

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn