Hướng dẫn viết chương trình Telnet.


  • administrators

    Sau đây mình xin hướng dẫn các bạn viết chương trình Telnet đến host.

    Bước 1: Tạo file Main.py

    from Telnet import Telnet
    
    class Main(object):
    def __init__(self):
    print"Main init()"
    telnet = Telnet()
    telnet.connect()
    
    if __name__=="__main__":
    print"Main main()"
    main = Main()
    

    Bước 2: Tạo file Telnet.py

    import telnetlib
    
    class Telnet(object):
    def __int__(self):
    print"Telnet init()"
    
    def connect(self):
    try:
    self.telnet = telnetlib.Telnet("rainmaker.wunderground.com", 23)
    self.data = self.telnet.read_until("nue:")
    print self.data
    
    self.telnet.write("\r\n")
    self.data = self.telnet.read_until("--")
    print self.data 
    except Exception as e:
    print"ERROR: " +str(e)
    
    if __name__=="__main__":
    print"Telnet main()"
    telnet = Telnet()
    
    telnet.connect()
    

    Giải thích:

    Bước 1
    Chúng ta tạo ra lớp Main, trong phương thức khởi tạo của Main ta tạo hàm khởi tạo:
    def init(self):
    print"Main init()"
    telnet = Telnet()
    telnet.connect()

    Trong hàm khởi tạo này ta tạo ra đối tượng Telnet và gọi phương thức connect() của đối tượng này.

    Bước 2:
    Ta tạo ra lớp Telnet, ở lớp này ta sử dụng thư viện telnet: telnetlib.
    Gọi đối tượng telnet: self.telnet = telnetlib.Telnet("rainmaker.wunderground.com", 23),
    kết nối đến host: rainmaker.wunderground.com ở cổng (port) 23.

    Chờ đến khi xuất hiện ký tự: "continue:":
    self.data = self.telnet.read_until("nue:")

    Nếu có thì sẽ in ra toàn bộ dữ liệu nhận được:
    print self.data

    Chúng ta gửi lệnh đến host: self.telnet.write("\r\n")

    Toàn bộ quá trình trên chúng ta đặt trong:
    try:
    CODE KẾT NỐI VÀ GỬI DATA
    except Exception as e:
    print"ERROR: " +str(e)

    Nếu có lỗi thì ta sẽ in ra mã lỗi: print"ERROR: " +str(e)

    Trên đây là kết nối telnet đơn giản, các bạn có thể thêm chức năng nhập host hoặc tạo GUI.
    Khi nào rảnh mình sẽ hướng dẫn cách tạo GUI nhé.



  • Hi anh Khanh,

    Em chưa hiểu dòng đầu tiên.

    from Telnet import Telnet
    

    Em có tham khảo link : 20.14. telnetlib — Telnet client
    Anh cho em hỏi là version Python anh dùng là 2 hay 3 vậy ?

    Em viết 01 script Telnet đến thiết bị switch như bên dưới nhưng khi chạy thì lại báo lỗi.

    import getpass
    import telnetlib
    import sys
    
    HOST = "192.168.0.1"
    user = "test"
    password = getpass.getpass()
    
    tn = telnetlib.Telnet(HOST)
    
    tn.read_until("sername:")
    tn.write(user + "\n")
    if password:
        tn.read_until("assword:")
        tn.write(password + "\n")
    
    tn.write("dir\n")
    tn.write("quit\n")
    
    print tn.read_all()
    

    Lỗi xuất trên terminal (Windows 7)

    Password:
    Traceback (most recent call last):
      File "test4.py", line 20, in <module>
        print tn.read_all()
      File "C:\Python27\lib\telnetlib.py", line 385, in read_all
        self.fill_rawq()
      File "C:\Python27\lib\telnetlib.py", line 576, in fill_rawq
        buf = self.sock.recv(50)
    socket.error: [Errno 10054] An existing connection was forcibly closed by the remote host
    

    Em dùng Wireshark thì thấy script vẫn chạy là có output bằng cách Follow TCP Stream. Nhưng trên teminal của thì lại báo lỗi.


  • administrators

    Anh dùng bản 2.7.10 trong ví dụ này nhé.



  • @Khanh-Nguyen Vậy trường hợp lỗi của em là bị gì vậy anh ?


  • administrators

    @chinhvc Em thử dùng chương trình của anh telnet đén 1 webserver được ko?



  • @Khanh-Nguyen Thank a. Em dùng script của anh đã telnet đến webserver đc rồi. Em nhầm chỗ import Telnet, đó là file Telnet.py mà a đã đề cập ở trên.
    Next step của em là install GNS3 và dùng python telnet đến router trên GNS3.
    Cám ơn anh nhiều.



  • Mình xin chia sẻ 1 script mình viết có sử dụng telnetlib để truy cập vào 1 máy chấm công vân tay, để làm gì thì chắc các bạn cũng đoán được :joy:

    https://github.com/htlcnn/scripts/blob/master/zkdevice.py


Hãy đăng nhập để trả lời
 

Có vẻ như bạn đã mất kết nối tới Cộng đồng Python Việt Nam, vui lòng đợi một lúc để chúng tôi thử kết nối lại.