태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
블로그 이미지
하늘을 헤엄치다. revoman

카테고리

분류 전체보기 (176)
Eye (13)
Programming (82)
Unix & Linux (52)
Android (3)
Tool and Tip (13)
시스템 관리 (7)
OPEN SOURCE (2)
XML (1)
WEB (0)
MY PROGRAM (1)
정보관리기술사 기출.. (1)
IT 동향 (1)
Total57,151
Today2
Yesterday28
PYTHON으로 REMOTE HOST에 접속하여, 명령어를 수행한 후 결과를 출력하는 프로그램이다.
PYTHON 2.4에서 시험하였으며, 3.X대와는 호환되지 않는다.

Telnet 연결시 타임아웃 처리 부분은 다음 사이트의 harookie님의 답글을 참조하였다.
http://python.kr/viewtopic.php?p=61182&sid=6096d8c4bba62ba532ad9bef051cb65b

#!/usr/bin/env python
# -*- coding: utf-8 -*-


#
# contact : revoman@naver.com
# version : 1.0
# date    : 2010-09-15
#
import sys
import os
import telnetlib
import socket
import getopt


class Telnet(telnetlib.Telnet):
    def __init__(self, host=None, port=0, timeout=10):
        telnetlib.Telnet.__init__(self)
        if host is not None:
            self.open(host, port, timeout)
    def open(self, host, port=0, timeout=10):
        self.eof = 0
        if not port:
            port = telnetlib.TELNET_PORT
        self.host = host
        self.port = port
        msg = "getaddrinfo returns an empty list"
        for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
            af, socktype, proto, canonname, sa = res
            try:
                self.sock = socket.socket(af, socktype, proto)
                self.sock.settimeout(timeout)
                self.sock.connect(sa)
            except socket.error, msg:
                if self.sock:
                    self.sock.close()
                self.sock = None
                continue
            break
        if not self.sock:
            raise socket.error, msg

if __name__ == '__main__':
    version = "1.0"
    new_line_cnt = 0
    login_prompt = "login: "
    passwd_prompt = "Password: "
    command_prompt = "> "
    userid = ""
    passwd = ""
    cmd = ""
    ip = ""
    port = 23
    timeout = 10
    basename = "oa_telnet_script.py"
    optlist, arglist = getopt.getopt(sys.argv[1:], 'nhl:o:u:p:c:t:L:P:C:')
    usage = """
Version : %s
Usage: %s -l hostip [-o port] -u username -p password -c "command" [-t conn_timeout] [-L login prompt] [-P passwd prompt] [-C command prompt] [-n]
    -l  host ip address
    -p  host port number
    -u  host login id
    -p  host login pw
    -c  command for running on the host
    -t  connection timeout seconds
    -h  print this usage
    -L  set login prompt
    -P  set password prompt
    -C  set command prompt
    -n  add newline after command
Example:  %s -l "127.0.0.1" -u user -p 1234 -c "ls" -t 10
""" % (version, basename, basename)

    if (len(sys.argv) < 9 ):
        print usage
        sys.exit(1)

    cmd_list = [ ]
    for o, a in optlist:
        if o == '-h':
            print usage
            sys.exit(0)
        elif o == '-l':
            ip = a
        elif o == '-o':
            port = int(a)
        elif o == '-u':
            userid = a
        elif o == '-p':
            passwd = a
        elif o == '-c':
            cmd = a
            cmd_list.append(cmd)
        elif o == '-t':
            timeout = int(a)
        elif o == '-L':
            login_prompt = a
        elif o == '-P':
            passwd_prompt = a
        elif o == '-C':
            command_prompt = a
        elif o == '-n':
            new_line_cnt = new_line_cnt+1
        else:
            print usage
            sys.exit(1)
#    print "info: %s %d %s %s %s %d" % (ip, port, userid, passwd, cmd, timeout)

    if (len(ip)==0 or len(userid)==0 or len(passwd)==0):
        print usage
        sys.exit(1)

    # LOGIN ID
    tn = Telnet(ip, port, timeout)
    response = tn.read_until(login_prompt, timeout)
    if login_prompt not in response :
        print "Error: get login prompt fail, -L option to change login prompt"
        tn.close()
        sys.exit(1)
    tn.write("%s\n" % userid)

    # LOGIN PASSWORD
    response  = tn.read_until(passwd_prompt, timeout)
    if passwd_prompt not in response :
        print "Error: get password prompt fail, -P option to change password prompt"
        tn.close()
        sys.exit(1)
    tn.write("%s\n" % passwd)

    # GET PROMPT
    response  = tn.read_until(command_prompt, timeout)
    if command_prompt not in response :
        print "Error: get command prompt fail, -C option to change command prompt"
        tn.close()
        sys.exit(1)


    # RUN COMMAND
    for cmd in cmd_list:
        tn.write("%s\n" % cmd)
        for x in range(new_line_cnt):
            tn.write("\n")
        response  = tn.read_until(command_prompt, timeout)
        if command_prompt not in response :
            print "Error: get command prompt fail"
            tn.close()
            sys.exit(1)
        print response

    tn.close()



Posted by revoman
TAG ,

최근에 달린 댓글

최근에 받은 트랙백

글 보관함