如何将交换机的命令编写好一次性发送给远程的交换机??
通常我配置交换机都是通过下面的方式:
telnet 202.103.203.11
接着输入用户名密码进入下面的状态
#config
(config)#vlan 200
(config-vlan)#description dfaljdf
(config)#interface vlan 200
()#ip address 10.10.10.10 255.255.0.0
在上面为了给交换机的某个端口配置ip地址需要登陆到交换机上去操作,
我现在想把这些命令先写好,通过远程的计算机直接发送给交换机202.103.203.11(交换机的管理地址),
请问一下该如何实现啊,用什么语言什么技术啊??

解决方案 »

  1.   

    用 delphi 可以做。winsock 建立 tcp 连接,然后模拟 telnet,发送命令。 不过这样无法交互,你程序写错了就得改程序。可以把命令写成配置文件,用程序读取配置文件,然后发送到交换机上去。
      

  2.   

    楼主是想编写个Delphi程序动态更改交换机的设置呢?还是,想通过脚本方式把配置命令一次性写入交换机,而不是登录交换机机后一行一行输入?
      

  3.   

    找了最简单的tcp聊天程序改改就行了。
      

  4.   

    支持Telnet的大多数交换机都支持导入配置文件的,导入时一般是交换机以TFTP方式从TFTP服务器下载配置文件,具体参见交换机配置手册。
      

  5.   

    你不如用tcl,现成的telnet模块,拉来直接用就可以了。
    Tutorial: Remote Directory Lister
    Introduction 
    Including the Expect Package and Setting Variables 
    Displaying Command-Line Help 
    Parsing Command-Line Arguments 
    Spawning the Session 
    Handling Errors 
    Sending the Request 
    Closing the Spawned Session 
    Introduction
    This tutorial shows how the Expect package can be used within a Tcl command-line script to log on to a remote machine via Telnet or SSH and return the contents of the current working directory.Note: To run this script, you must have ActiveState Expect for Windows and ActiveTcl 8.4 or later installed on your machine. You also require remote access to a Unix machine that is running Telnet or SSH.First, run the Tcl script "remotels.tcl" to see how it operates. Then progress through the rest of the tutorial, which examines essential portions of the code and explains how Expect is incorporated.
    The command-line syntax required to run "remotels.tcl" varies depending on whether you are accessing the remote machine via Telnet or SSH.For example, if you are using Telnet (the default -login option), and are running "remotels.tcl" from its default location, enter the following at the command prompt.C:\Tcl\bin\remotels.tcl -host hostname -user username
    If, instead, you are accessing the remote host via SSH, you must also specify "ssh" as the login type using the -login option.In both cases, the program prompts for a password.When the script runs, it returns the number of files and directories in the current working directory, along with a list of their names.For a demonstration of a similar, GUI-based script, see "tkremotels.tcl" in the Demos section of the ActiveState Expect for Windows User Guide.Top 
    Including the Expect Package and Setting Variables
    The package require Expect statement makes the Expect package available to the "remotels.tcl" application. It should appear along with other necessary package commands near the beginning of any Tcl script that uses Expect. Since a version is not specified, the highest available version of Expect is loaded.A number of variables are set, including exp::winnt_debug, which Expect uses to enable viewing of a controlled console. If this variable is not set, the console remains hidden.The array set command initializes the variables that are passed through the script so that the local machine can access a directory on a remote machine. Note that the ls variable is defined as "bin/ls/ -A1". This runs Unix's ls command on the remote machine and specifies how the information is to be displayed.package require Expectexp_log_user 0set exp::nt_debug 1set timeout 10set env(TERM) dumbarray set OPTS {
        host    ""
        user    ""
        passwd  ""
        login   telnet
        prompt  "(%|#|>|\\$) $"
        ls      "/bin/ls -A1"
    }Top 
    Displaying Command-Line Help
    The proc usage procedure establishes the command-line options for "remotels.tcl". If the script is run without any options, a list of options and their definitions are displayed on the command line.proc usage {code} {
        global OPTS
        puts [expr {$code ? "stderr" : "stdout"}] \
        "$::argv0 -user username -host hostname ?options?
        -passwd password (you will be prompted if none is given)
        -login  type     (telnet, ssh, rlogin, slogin {$OPTS(login)})
        -prompt prompt   (RE of prompt to expect on host {$OPTS(prompt)})
        -log    bool     (display expect log info {[exp_log_user]})
        -ls     lspath   (path to ls on host {$OPTS(ls)})
        -help            (print out this message)"
        exit $code
    }proc parseargs {argc argv} {
        global OPTS
        foreach {key val} $argv {
        switch -exact -- $key {
            "-user"   { set OPTS(user)   $val }
            "-host"   { set OPTS(host)   $val }
            "-passwd" { set OPTS(passwd) $val }
            "-login"  { set OPTS(login)  $val }
            "-prompt" { set OPTS(prompt) $val }
            "-ls"     { set OPTS(ls)     $val }
            "-log"    { exp_log_user $val }
            "-help"   { usage 0 }
        }
        }
    }
    parseargs $argc $argvif {$OPTS(host) == "" || $OPTS(user) == ""} {
        usage 1
    }if {$OPTS(passwd) == ""} {
        stty -echo; 
        puts -nonewline "password required for $OPTS(host): "
        flush stdout
        gets stdin ::OPTS(passwd)
        stty echo
    }proc timedout {{msg {none}}} {
        send_user "Timed out (reason: $msg)\n"
        if {[info exists ::expect_out]} {
        parray ::expect_out
        }
        exit 1
    }Top 
    Spawning the Session
    If you are logging on to the remote machine using "ssh", "slogin" or "rlogin", the information gets processed in a slightly different manner. With any of these methods, it is necessary to include an additional -l option to specify a username.Next, the $spawn_id variable is captured, storing information about this spawn session in memory for future reference.If you are logging in via Telnet, the final code block in this section is required to pass the username to Telnet. If the login is completed before the script times out, the exp_send command passes the username.switch -exact $OPTS(login) {
        "telnet" { set pid [spawn telnet $OPTS(host)] }
        "ssh"    -
        "slogin" -
        "rlogin" { set pid [spawn $OPTS(login) $OPTS(host) -l $OPTS(user)] }
    }set id $spawn_idif {$OPTS(login) == "telnet"} {
        expect -i $id timeout {
        timedout "in user login"
        } eof {
        timedout "spawn failed with eof on login"
        } -re "(login|Username):.*" {
        exp_send -i $id -- "$OPTS(user)\r"
        }
    }Top 
    Handling Errors
    The error-handling section of the script is a while loop that anticipates a number of problems that could occur during login. This section is not exhaustive. For example, you could also add provisions for invalid usernames and passwords.If the login is not completed during the allotted 10-second time frame, which is set at the beginning of "remotels.tcl" (set timeout 10) and specified with expect -i $id timeout, the program displays an appropriate error message.The remainder of this loop makes use of the exp_send command to allow for other scenarios, such as the user typing "yes" when prompted to proceed with the connection, entering a password, or resetting the terminal mode.set logged_in 0
    while {!$logged_in} {
        expect -i $id timeout {
        timedout "in while loop"
        break
        } eof {
        timedout "spawn failed with eof"
        break
        } "Are you sure you want to continue connecting (yes/no)? " {
        exp_send -i $id -- "yes\r"
        } "\[Pp\]assword*" {
        exp_send -i $id -- "$OPTS(passwd)\r"
        } "TERM = (*) " {
        exp_send -i $id -- "$env(TERM)\r"
        } -re $OPTS(prompt) {
        set logged_in 1
        }
    }Top 
    Sending the Request
    If the login is successful, the code in the if statement below is used to send the "ls" request to display files and directories. After the request is sent with exp_send, the resulting output is captured in the dir variable, which is set on the fourth line of the code shown below.if {$logged_in} {
        exp_send -i $id -- "$OPTS(ls)\r"
        expect -i $id timeout {timedout "on prompt"} -re $OPTS(prompt) {
        set dir $expect_out(buffer)
        }
        exp_send -i $id -- "exit\r"
        if {[info exists dir]} {
        regsub "\r" $dir "" dir
        set files [split $dir \n]
        set files [lrange $files 1 [expr {[llength $files]-2}]]
        puts "\n[llength $files] FILES AND DIRS:"
        puts $files
        }
    }Top 
    Closing the Spawned Session
    The exp_close command ends the session spawned by "remotels.tcl". Just to be sure that session does indeed close, the exp_wait command causes the script to continue running until a result is obtained from the system processes. If the system hangs, it is likely because exp_close was not able to close the spawned process, and you may need to kill it manually.exp_close -i $idexp_wait -i $id