linux perl telnet安装,51CTO博客-专业IT技术博客创作平台-技术成就梦想
Telnet是一個古老而又不安全的協議,用來實現遠程登錄。這種服務可以和基于客戶機/服務器進行通信,也就是說把你的電腦虛擬成一個鍵盤(偽終端)來和遠程的服務進行通信,而服務器以為輸入來自它本地的鍵盤,我們在本地所執行的命令會發送到遠程服務器執行并返回結果。Telnet是基于TCP連接,所以在建立連接之前需要握手來表明身份,即向服務器提供用戶標識(登錄名和密碼)。Telnet服務默認監聽23端口來提供服務。
在Perl中,我們使用Net::Telnet模塊來提供對Telnet協議的支持。它和其它的Perl模塊一樣,使用面向對象的語法,因此它非常的簡單。
準備工作
我們必須要開啟Telnet服務,這樣客戶端才可以使用它進行遠程登錄。
查看是否安裝Telnet:
# rpm -qa|grep -i telnet
如果沒有,則:
# yum -y install telent telnet-server
配置Telnet:
# vi /etc/xinetd.d/telnet
把disable=yes 改成disable=no
啟動Telnet:
# /etc/init.d/xinetd restart
檢查是否成功啟動:
# netstat -ant|grep 23 或者 # pgrep telnet
創建用戶名:
# useradd telnet //默認情況root不充許Telnet登錄,因為它不安全(明文傳輸)
設置密碼
# passwd telnet
簡單的嘗試
如果我們要和遠程的服務器進行通信,我們要提供基本的用戶名和密碼來表示你有權使用它:
use Net::Telnet;
my $telnet=Net::Telnet->new($hostname);
$telnet->login($usename,$password);
...
像上面這樣,基本上你就可以使用Telnet來實現遠程登錄了。在建立鏈接之后,我們可以使用$telent對象來執行后續的操作,這些操作就像是在遠程電腦上執行一樣,這樣我們就實現的遠程維護系統的目的。
Telnet模塊為我們提供足夠的方法來實現維護系統的目的,它有而這些方法也有大量的選項供我們,所以Telnet是一個足夠靈活的模塊,下面就分別來說說這些方法的具體使用方法。
首先從new方法開始。
在Telnet模塊中,我們調用new方法以此來創建一個telnet對象,這個對象就像是一個鍵盤(或者說是一個文件句柄)一樣,我們通過個對象來和遠程服務器進行通信。那么怎樣來創建這個telnet對象呢,這就是new構造函數的用武之地了。一般來說我們可以使用以下兩種方法來創建telnet對象:
1) my $telnet=Net::Telnet->new(ip或者主機名)
2) my $telnet=Net::Telnet->new(Host=>'ip或者主機名')
像上面我們用命名參數的形式去調用new方法,它還有更多的選項,這些選項可以更靈活的對對象加以控制,這些選項以"鍵/值"對的形式出現,這在Perl中叫做命名參數。下面是new方法常用的選項:
=====================================================================
選項描述默認值
=====================================================================
Host要連接的主機localhost
Port連接的端口23
Timeout超時(秒)10
Binmode禁止CRLF轉換false
Cmd_remove_mode 從輸入中刪除回顯命令auto
Errmode設置錯誤模式die[return]
Input_log輸出結果日志文件名none
Fhopen用于通信的文件句柄none
Prompt匹配的命令行提示符/[\$%#>] $/
在上面這個列表中,我們一般需要設置Timeout選項,其它設為默認即可,當然如果你的telnet默認端口不是23,還得顯式指定Port。至于其它的選項我們也來作一個簡單的解析。
Binmode:這個用于控制CRLF轉換,標準的服務器程序都以CRLF對的形式來標識每個換行字符,這樣就可以明確的區分每條命令序列。如果你把Binmode設為Binmode=>true或者Binmode=>1,則數據將逐字的發送。
Cmd_remove_mode:是否刪除服務器響應數據中的第一行,準確的說是刪除我們發送給服務器的命令。因為這個命令會附加在服務器回應的數據名中。
Errmode:我們在連接遠程服務器是不可避免的會發生錯誤,這個選項就是用來控制當錯誤發生應該怎么處理。你可以自定義處理程序來響應發生錯誤時要做的工作。
Input_log:它的值可以為文件名或者已經打開的文件句柄。它用來保存從服務器所接收到的數據。
Prompt:它的值應該是一個正則表達式(/pattern/),用于下面就要說的login方法的參考,來表明命令是否成功運行。
如果你已經通過new方法成功的連接到了一個遠程主機的指定端口,剩下的問題就是用指定的用戶名和密碼進行登錄,它同樣也有兩種方式:
1) $telnet->login($username,$password)
2) $telnet->login(
Name=>$username,
Password=>$password,
[Prompt=>$prompt,]
[Timout=>$timeout]
)
如果login如果遇到錯誤,則返回false。
在我們成功登錄之后,如何執行命令呢?這可以通過cmd()方法來實現,cmd()的返回結果可以存放在標量或者數組中:
1) $result=$telnet->cmd($command)
2) @result=$telnet->cmd(
String=>$command,
[Timeout=>$timeout,]
[Prompt=>$pattern,]
[Output=>$ref,]
[Cmd_remove_mode=>$mode]
)
cmd()中的選項值可以覆蓋掉new()方法中同名選項。
除了cmd()方法外,我們還可以使用print()方法來執行命名,然后使用waitfor()方法來獲得命令執行之后的結果(成功或者失敗都有一些標志,這個方法其實就是用正則去匹配結果數據)
其它可用方法:
errmsg():返回方法調用時的錯誤消息
lastline():返回從對象讀取的最后一行文本
get(),getline(),getlines():返回Telnet會話中可用的數據
input_record_separator(),output_record_separator():定義輸入記錄和輸出記錄分隔符,默認都為\n
改變Telnet對象的默認值:
$telnet->timeout($value) #改變已經創建的Telnet對象的值
$telnet->errmode($value)
$telnet->binmode($value)
$telnet->prompt($value)
關閉Telnet連接:
$telnet->close();
總結
以上是生活随笔為你收集整理的linux perl telnet安装,51CTO博客-专业IT技术博客创作平台-技术成就梦想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IntelliJ IDEA 2021.1
- 下一篇: 爬取百度迁徙2021年春运迁徙数据(仅省