1 設計背景
越來越多的企業在建立自己的WEB站點時選擇了基于微軟的構架。Windows操作系統、IIS WEB Server和ASP技術得到了廣泛的使用。但很多企業的網絡中存在大量的UNIX主機,導致我們經常希望在瀏覽器中實現對UNIX系統資源的訪問和控制,例如:通過瀏覽器查看UNIX系統中的用戶進程、查看網絡狀態、甚至完成殺死一個進程這樣的控制操作。以前我們可以通過Telnet程序遠程登錄到UNIX主機上,輸入用戶名和口令,并在命令行方式下輸入命令。通過ASP中的ActiveX控件編程,我們同樣可以使用Telnet協議訪問UNIX主機,這樣,UNIX系統中的資源就可以在B/S環境中得到更加充分的利用。
2 控件的功能
本文要介紹的控件是美國Dart Communications公司開發的PowerTCP Tools控件組中的Telnet Tool ActiveX控件。它支持Visual Studio、 ASP、Office 97 (VBA)、C++Builder、 Delphi、PowerBuilder 等開發環境。
它可以管理Telnet, rsh, rexec和rlogin連接,提供了建立、使用和終止會話的方法,支持自動選項協商,如終端類型、回顯模式、窗口大小等,使用者不必關心協議實現細節,極大的簡化了使用這些協議的編程難度??丶梢院蚒NIX主機、路由器、終端服務器等設備直接進行Telnet通信,并支持間接的Telnet訪問 。
3 控件的ASP編程方法
Telnet Tool ActiveX控件的使用極其簡單,下面介紹它的主要屬性和方法。
TermType屬性:指定終端類型,如ANSI、VT320等,可以通知UNIX主機客戶端所仿真的終端類型。
Timeout屬性:當設定為0值時,控件使用非阻塞方式控制會話。當設定為大于0的值時,控件使用阻塞方式控制會話,Timeout表示超時設定,單位為毫秒。
State屬性:返回TCP連接狀態。
Connect方法:建立一個連接,格式為:
Object.Connect RemoteName [,RemotePort] [,LocalName] [,LocalPort] 。其中RemoteName為要連接的UNIX主機的名字或IP地址。RemotePort為要連接的UNIX主機的端口號,缺省為23,是標準的telnet端口。LocalName和LocalPort為本地主機名和端口,一般可以省略。
Close方法:關閉一個連接,格式為 Object.Close
Send方法:在連接建立后,發送數據。格式為:
Object.Send Data 。Data為要發送給UNIX主機的數據。
Serach方法:接受UNIX主機返回的數據,并在數據流中尋找指定的結束標志,結果包括到結束標志為止的所有返回數據。如果在Timeout規定的時間內未得到指定的結束標志,則產生超時錯誤。格式為:Object.Search Data,Token 。Data中保存返回結果,Token指定了結束標志字符串。
4 編程實例
下面是一個簡單的Telnet Tool ActiveX控件的ASP編程實例。 實驗環境是: Windows 2000 Professional、IIS 5.0、SCO OpenServer 5.0.2和Telnet Tool ActiveX控件。Telnet Tool ActiveX控件可以在www.dart.com下載30天試用版,只需要安裝在WEB服務器上。
程序并不復雜,登錄到一個SCO UNIX系統后,執行了2條命令,命令的結果顯示在瀏覽器頁面上。
HTML
HEADTITLEPowerTCP Telnet Tool Demo Page/TITLE/HEAD
BODY
*******************************************************************
Program: PowerTCP Telnet Tool Demo
Author: Yin
Date: 07/16/2001
Purpose: To demonstrate how to login into a SCO UNIX server.
********************************************************************}
Session(RESULT) =
On Error Resume Next
Create a Telnet control
Dim Telnet1
Set Telnet1 = Server.CreateObject(Dart.Telnet.1)
Use a 10 second timeout
Telnet1.Timeout = 10000
Specifies terminal type
Telnet1.TermType = ansi
AddResult Connecting to + txtHost + ... + vbCrLf
Connect to the host on port 23
Telnet1.Connect txtHost,23
Dim a string to be used by the search method
Dim Data
Data =
Search for login prompt
Telnet1.Search Data, txtLoginPrompt
AddResult Data
Send username
Telnet1.Send txtUser + vbCrLf
Search for password prompt
Telnet1.Search Data, txtPassPrompt
AddResult Data
Send password
Telnet1.Send txtPass + vbCrLf + vbCrLf
Search for command prompt
Telnet1.Search Data, txtCommandPrompt
AddResult Data
Send command
Telnet1.Send ps + vbCrLf
Search for command prompt
Telnet1.Search Data, txtCommandPrompt
AddResult Data
Send command
Telnet1.Send netstat -rn + vbCrLf
Search for command prompt
Telnet1.Search Data, txtCommandPrompt
AddResult Data
Close the connection
Telnet1.Close
If Err.number = 0 then
AddResult vbCrLf + Disconnecting... SUCCESS!
Else
Display info about the error
AddResult vbcrlf + ERROR # + CStr(Err.number) + : + Err.Description
End if
Response.Write Session(RESULT)
End Sub
Private Sub AddResult(s)
Session(RESULT) = Session(RESULT) + ReadyForHtml(s)
End Sub
Substitute escape codes for some of the HTML reserved characters
Function ReadyForHtml(Data)
On Error Resume Next
ReadyForHtml = Data
ReadyForHtml = Replace(ReadyForHtml, , gt;)
ReadyForHtml = Replace(ReadyForHtml, , lt;)
ReadyForHtml = Replace(ReadyForHtml, , nbsp;)
ReadyForHtml = Replace(ReadyForHtml, vbCrLf , brnbsp;)
ReadyForHtml = Replace(ReadyForHtml, vbCrLf, br)
End Function
Dim txtHost
Dim txtLoginPrompt
Dim txtUser
Dim txtPassPrompt
Dim txtPass
Dim txtCommandPrompt
txtHost = 192.0.1.6
txtLoginPrompt = login:
txtUser = root
txtPassPrompt = Password
txtPass = hp123
txtCommandPrompt = #
DoLogin()
通過使用Telnet Tool ActiveX控件,我們可以在ASP程序中登錄到UNIX系統上,輕松地完成很多命令行操作。類似的,我們也可以實現通過瀏覽器查看CISCO路由器、交換機中的網絡配置和運行狀態。
企業的防火墻設置一般來說應該禁止從外部網直接遠程登錄到內部的UNIX主機上,但是我們可以通過在瀏覽器上簡單的點擊選擇特定的操作,由WEB Server端的ASP程序登錄到UNIX主機上完成指定操作,在方便管理的同時增加了系統的安全性。
當然,我們在ASP編程中應該隨時考慮到安全性問題,尤其是要避免不慎造成的ASP源代碼和UNIX口令的泄露。