免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10327 | 回复: 8
打印 上一主题 下一主题

关于Net::Telnet 模块的一个问题. [复制链接]

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
1 [报告]
发表于 2003-04-23 16:17 |显示全部楼层

关于Net::Telnet 模块的一个问题.

http://search.cpan.org/author/JROGERS/Net-Telnet-3.03/lib/Net/Telnet.pm

我測試你的script後發現...
你的用法不對..沒給prompt(xxx>; xxx$ xxx# xxx% )..
程序會不曉得要匹配什麼樣的
prompt,所以無法跳出...
my $result = $telnet->;login(Name=>;$user,Password =>;$user);
會block在這行....
請參照上面網頁...裡面的範例修改你的程序...

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-04-23 22:21 |显示全部楼层

关于Net::Telnet 模块的一个问题.

事實上Net::Telnet module很笨的...
你還沒登錄進去進去前,就必須要先給他系統將會出現的prompt
例如: apile>; _
不然他不知道要比對什麼樣的字串來決定下一步要怎麼做...
另外你問的login password,我覺得是因為每個系統的登陸畫面都差不多..
一定都是 login:_ 與Password:_

所以我寫Expect的時候匹配的字串是
ogin:_ (_表示space) 匹配到就把帳號丟過去...
sword:_ (_表示space)匹配到就把密碼丟過去...
為什麼要這樣子匹配..與Telnet的stty的參數有關係...
書上解釋比較清楚...

我相信Net::Telnet也是一樣..
但是如果遇到不是這樣登陸格式的OS...那Net::Telnet就會出問題...
所以寫這類要登陸到其他系統的程式
強烈建議你用Expect module....

明天上班,再利用Net::Telnet寫個簡單的script給你當參考....
Best Regard...

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-04-24 08:15 |显示全部楼层

关于Net::Telnet 模块的一个问题.

#!/usr/bin/perl
    use Net::Telnet ();
    $t = new Net::Telnet (Timeout =>; 10,
                          Prompt =>; '/\% $/');
    $t->;open("10.1.1.1";

    $t->;login("apile", "xxxxx"; ## 帳號密碼
    @lines = $t->;cmd("who";
    print @lines;
OUTPUT:
[apile@nb perl]$  ./ttt.pl
apile      pts/2        Apr 24 08:15    (xxxxx)


^^^^^^^^^^^^^^^^^^^^^^^^^^^^
這是我從Redhat 8連上Solaris 8上面去下cmd.."who"
因為我在Solaris上用的shell是tcsh..所以我的Prompt是
%...這裡我用了Regular Expression...如果要符合全部的話
就要用'/[\%\#\$\>;] $/' 這樣子....
如果用Expect.pm的話...我以前有貼過..你可以去找找..

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-04-24 13:04 |显示全部楼层

关于Net::Telnet 模块的一个问题.

剛剛trace了一下Telnet.pm這個file裡面的sub login()...發現
你可以利用
$t->;login("apile", "xxxxx"|| die "xxxx";
或者利用
$@去看他的Error Msg..
如果發現有Error Msg..表示根本沒有成功登錄系統....

因為我沒很注意看這個module..
所以不清楚他到底怎麼做的...
不過你自己Trace一下應該蠻容易的...
Telnet.pm位置...
/usr/lib/perl5/site_perl/5.8.0/Net
如果你是5.6.1的話 5.8.0改成5.6.1就好了...

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-04-25 15:38 |显示全部楼层

关于Net::Telnet 模块的一个问题.

#!/usr/bin/perl
    use Net::Telnet ();
    $t = new Net::Telnet (Timeout =>; 10,
                          Prompt =>; '/[\%\$\#\>;] $/');
    $t->;open("10.1.1.1";

    $t = eval{
      $t->;login("apile", "xxx";
      return $t;
    };

    if($@) {
      print " XXXX $@\n";
    } else {
       @lines = $t->;cmd("who";
       print @lines;
    }


你只要改變帳號密碼那個欄位..與if($@)等於True裡面的程序即可...

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2003-05-10 21:08 |显示全部楼层

关于Net::Telnet 模块的一个问题.

http://search.cpan.org/author/JROGERS/Net-Telnet-3.03/lib/Net/Telnet.pm

看看吧....
這個module只能匹配
login:
password:
這樣子的login模式..如果是cisco的
username:
password:
就不能用了.....

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
7 [报告]
发表于 2003-05-14 17:44 |显示全部楼层

关于Net::Telnet 模块的一个问题.

[quote="xiacs"]

给我讲一讲吧! 怎么用啊 洋文的看不懂啊 !
怎么不能用于cisco?想用于cisco 该怎么办 ?[/quote]


因為Net::Telnet 他的login 匹配模式是
login:
Password:
這是一般Unix like的登入系統模式..但是事實上在網絡上..
存在有許多不同的Switch..他們本身的OS..也有提供所謂的TL1 command..
你要使用這些cmd..就必須要登錄至該系統才可以下指令..
以Cisco為例他的OS叫 IOS...其他不同的系統例如Extreme, UniSphere, Juniper
等等公司所提供的OS..有時後會稱為IOS like..
他的登錄畫面..以IOS為例,只有
Password:
有些Switch不用login會用username..
這時候,針對這兩種情形...
Net::Telnet會死在那邊...因為他匹配不到login:這個字元..
在這種情形下...就需要使用Expect..去批配這種情形..
或用Cisco專用的module..
因此..從以前到現在我都強烈建議使用Expect module..
因為他可以模擬很多種你想不到的狀況...
不過如果你只是要連上Unix like的OS..用NetTelnet就很夠用了..
deathcult 已經提供了Expect的範例..好好研究..你就會了解
TCL語言的好用的地方了..^^

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-05-14 22:11 |显示全部楼层

关于Net::Telnet 模块的一个问题.

[quote="xiacs"]


非常感谢    你们对于网络以及perl怎么这么精通 ?[/quote]

因為我在電信公司上班..平常碰到的都是ATM Switch、DSLAM、BRAS
等Layer 2的設備...有些只有TL1可以去做管理,所以不熟不行..
Layer 3的設備...則是我自己的興趣..反正書那麼多..多看多學囉..

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2003-05-15 00:03 |显示全部楼层

关于Net::Telnet 模块的一个问题.

事實上在SNMP(Simple Network Management Protocol)發展的同時,
那些網絡設備廠商同時還有再發展TL1 command,這是一種透過指令模式來
控制設備的一種規格標準..但是因為各家廠商對於TL1的解釋不同,造成每家做
出來的TL1 command都不相同..向我碰到的ALCATEL與SAMSUNG的一些設
備都有TL1指令,但是兩個指令格式完全不同..
而SNMP的好處在於他用MIB檔..取代掉指令格式...各家設備可以都至少要
implement 標準的RFC文件...而自己獨家的MIB檔案..則可以另行定義..
並且透過一個intepreter還是compiler..存入snmp agent中...
這樣子.我可以在snmp trap server上..收集所有網路設備的狀態並且
透過snmpget、snmpset去管理那部設備...
而TL1除了因為指令格式複雜..並且沒有統一標準..所以慢慢的..會被邊緣化
但不可能face out..因為有些時候我們還是需要利用TL1指令去看看..
設備上面目前的狀態...
可能有講錯..不過基本觀念應該沒錯..snmp又是另一門複雜的協議..
大家看看就好...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP