Chinaunix

标题: 关于Net::Telnet 模块的一个问题. [打印本页]

作者: OYXin    时间: 2003-04-23 15:49
标题: 关于Net::Telnet 模块的一个问题.
open(READ,"<$userfile";
open(WRITE,">;>;$host.txt";
print WRITE "user        passwd\n";




while(my $user = <READ>
{
        my $telnet = Net::Telnet->;new(Host =>;"$host",Timeout =>; 30);
        if(!$telnet)
        {
        print "sorry,it seems that you can't telnet it!";
        exit;
        }
        my $result = $telnet->;login(Name=>;$user,Password =>;$user);
        $telnet->;close;
        print "$result\n";
        if($result == 1)
        {
        print WRITE "$_                $_\n";
        }
}
close WRITE;
close READ;
不知道为什么每次用户名和密码不匹配的时候,就退出整个程序了.
作者: apile    时间: 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在這行....
請參照上面網頁...裡面的範例修改你的程序...
作者: OYXin    时间: 2003-04-23 17:39
标题: 关于Net::Telnet 模块的一个问题.
ok,这些信息足够了,我去试试,再次表示感谢,aplie,我心目中的hacker.
作者: OYXin    时间: 2003-04-23 18:20
标题: 关于Net::Telnet 模块的一个问题.
aplie啊,如果你不能登陆上去怎么取匹配提示富了?还有默认的誊录login passwd都能匹配到的,信息是:不正确的的用户名的密码就完了,而如果成功就给我一个1,这个应该是成功了$result被赋予的直.能在给点提示2>;?
作者: apile    时间: 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...
作者: apile    时间: 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的話...我以前有貼過..你可以去找找..
作者: OYXin    时间: 2003-04-24 12:04
标题: 关于Net::Telnet 模块的一个问题.
apile您误会我意思了,看程序可以看出是从一个user文件里面读出用户名,然后测试是否有用户名和密码重复的用户,所以前提是你并不知道那个用户的确定密码,可以说是一个暴力猜测密码的script.当程序发现用户名和密码不对的时候就自动退出不继续执行了,这个问题没有解决,应为如果我从来没有登陆上这个机器的话怎么知道是什么提示符了??^_^.
作者: apile    时间: 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就好了...
作者: apile    时间: 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裡面的程序即可...
作者: OYXin    时间: 2003-04-25 21:21
标题: 关于Net::Telnet 模块的一个问题.
恩,这个问题解决了,感谢的话就不说了阿.^_^
作者: xiacs    时间: 2003-05-10 17:06
标题: 关于Net::Telnet 模块的一个问题.
啊 啊 啊 啊 啊   快告诉我 怎样使用这个模块啊!

我今天搜了一天了  好累啊

谢谢!
作者: apile    时间: 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:
就不能用了.....
作者: xiacs    时间: 2003-05-13 14:45
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "apile" 发表:
http://search.cpan.org/author/JROGERS/Net-Telnet-3.03/lib/Net/Telnet.pm

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


给我讲一讲吧! 怎么用啊 洋文的看不懂啊 !
怎么不能用于cisco?想用于cisco 该怎么办 ?
作者: deathcult    时间: 2003-05-13 16:02
标题: 关于Net::Telnet 模块的一个问题.
用Expect.pm模块。
作者: deathcult    时间: 2003-05-13 16:23
标题: 关于Net::Telnet 模块的一个问题.
#!/usr/local/bin/perl

use Expect;

my $timeout = 10;
my $delay = 1;
my $cmd         = "telnet";
my @params = qw/localhost 23/;
my $user = "test";
my $pass = "test";

$exp = Expect->;spawn($cmd, @params) or die "Can't spawn $cmd\n";

$exp->;expect($timeout, 'login:');
$exp->;send_slow($delay, "$user\n";
$exp->;expect($timeout, -re=>;'[Pp]assword:');
$exp->;send_slow($delay, "$pass\n";

$exp->;interact();
$exp->;hard_close();

exit 0;
作者: rootstock    时间: 2003-05-13 21:31
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "xiacs" 发表:


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


cisco 的有cisco模块
名字叫
net-cisco-telnet
不但可以轻易进路由器,连privilege的分级都能进,放心好了。
作者: xiacs    时间: 2003-05-13 22:28
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:


cisco 的有cisco模块
名字叫
net-cisco-telnet
不但可以轻易进路由器,连privilege的分级都能进,放心好了。




啊  你小子 真厉害啊 !
快给我讲一讲啊 感谢 !  洋文的看不懂  资料的没有 ............
作者: rootstock    时间: 2003-05-13 23:22
标题: 关于Net::Telnet 模块的一个问题.
use Net::Telnet::Cisco;

  my $session = Net::Telnet::Cisco->;new(Host =>; '123.123.123.123');
  $session->;login('login', 'password');

  # Execute a command
  my @output = $session->;cmd('show version');
  print @output;

  # Enable mode
  if ($session->;enable("enable_password" ) {
      @output = $session->;cmd('show privilege');
      print "My privileges: @output\n";
  } else {
      warn "Can't enable: " . $session->;errmsg;
  }

  $session->;close;
作者: apile    时间: 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語言的好用的地方了..^^
作者: xiacs    时间: 2003-05-14 21:46
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:
use Net::Telnet::Cisco;

  my $session = Net::Telnet::Cisco->;new(Host =>; '123.123.123.123');
  $session->;login('login', 'password');

  # Execute a command
  my @output = $session->;c..........



非常感谢!

我在win下能用到Net::Telnet::Cisco吗?有没有win下的这个模块?那里下载?

另外,如何进入enable模式的命令 我没看懂  给我讲讲吧 !

再次感谢 ! 你们怎么这么厉害啊 ??
作者: xiacs    时间: 2003-05-14 21:48
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "apile" 发表:



因為Net::Telnet 他的login 匹配模式是
login:
Password:
這是一般Unix like的登入系統模式..但是事實上在網絡上..
存在有許多不同的Switch..他們本身的OS..也有提供所謂的TL1 command..
你要使用這些cmd...........



非常感谢    你们对于网络以及perl怎么这么精通 ?
作者: xiacs    时间: 2003-05-14 21:51
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:
use Net::Telnet::Cisco;

  my $session = Net::Telnet::Cisco->;new(Host =>; '123.123.123.123');
  $session->;login('login', 'password');

  # Execute a command
  my @output = $session->;c..........



给我点资料吧 ! 最好是中文的  我刚看到  你好像有win下的这方面的使用经验啊 !  给点吧 !
作者: apile    时间: 2003-05-14 22:11
标题: 关于Net::Telnet 模块的一个问题.
[quote="xiacs"]


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

因為我在電信公司上班..平常碰到的都是ATM Switch、DSLAM、BRAS
等Layer 2的設備...有些只有TL1可以去做管理,所以不熟不行..
Layer 3的設備...則是我自己的興趣..反正書那麼多..多看多學囉..
作者: xiacs    时间: 2003-05-14 22:48
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "apile" 发表:


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



哦  你是专业的   ......

什么是 TL1 ?
作者: apile    时间: 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又是另一門複雜的協議..
大家看看就好...
作者: rootstock    时间: 2003-05-15 16:26
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "apile" 发表:



因為Net::Telnet 他的login 匹配模式是
login:
Password:
這是一般Unix like的登入系統模式..但是事實上在網絡上..
存在有許多不同的Switch..他們本身的OS..也有提供所謂的TL1 command..
你要使用這些cmd...........


我同意,不过用模块还是比较方便的,因为该模块不只是提供了登陆功能,还有一些其它的比较实用的功能,用起来比较方便的。(也许是我对expect不熟悉的缘故吧)。
作者: rootstock    时间: 2003-05-15 16:32
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "xiacs" 发表:



非常感谢!

我在win下能用到Net::Telnet::Cisco吗?有没有win下的这个模块?那里下载?

另外,如何进入enable模式的命令 我没看懂  给我讲讲吧 !

再次感谢 ! 你们怎么这么厉害啊 ??


我也是初学,不过刚好用过这个模块而已。

这个模块可以在win32下使用,在PPM下就可以下载了
在dos环境
ppm
install net-cisco-telnet
quit

# Enable mode
($session->;enable("enable_password" )
作者: rootstock    时间: 2003-05-15 16:34
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "xiacs" 发表:



给我点资料吧 ! 最好是中文的  我刚看到  你好像有win下的这方面的使用经验啊 !  给点吧 !


去search.cpan.org下找,有这个模块的使用方法
win和unix差不多
作者: rootstock    时间: 2003-05-15 16:36
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "apile" 发表:
事實上在SNMP(Simple Network Management Protocol)發展的同時,
那些網絡設備廠商同時還有再發展TL1 command,這是一種透過指令模式來
控制設備的一種規格標準..但是因為各家廠商對於TL1的解釋不同,造成每家做
..........


原来和我是同行..
我是中国电信的
作者: rootstock    时间: 2003-05-15 16:51
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "deathcult" 发表:
rd:');
$exp->;send_slow($delay, "$pass\n";

$exp->;interact();
$exp->;hard_close();

exit 0;


我在CPAN中找不到这个模块,请问你有这个模块吗?
可否给我一个
cntonyxie@hotmail.com

thanks
作者: xiacs    时间: 2003-05-15 23:34
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:


去search.cpan.org下找,有这个模块的使用方法
win和unix差不多



哦  你们真是厉害 !

偶佩服的真的要晕了 ..............
作者: xiacs    时间: 2003-05-15 23:45
标题: 关于Net::Telnet 模块的一个问题.
[quote="rootstock"]
这个模块可以在win32下使用,在PPM下就可以下载了
在dos环境
ppm
install net-cisco-telnet
quit
[quote]


我下载了   我从未安装过perl的模块

好像是安装模块 先要 安装一个工具 以后才能 安装模块 ?是不是这样的 ?

急   盼回答 !
作者: rootstock    时间: 2003-05-16 10:10
标题: 关于Net::Telnet 模块的一个问题.
install net-cisco-telnet
这句成功就安装完了
作者: xiacs    时间: 2003-05-16 10:46
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:
install net-cisco-telnet
这句成功就安装完了



是不是先解压缩  然后进到 该目录

运行  ppm
install net-cisco-telnet  ?
作者: xiacs    时间: 2003-05-16 11:12
标题: 关于Net::Telnet 模块的一个问题.
我装不上去
作者: xiacs    时间: 2003-05-16 11:29
标题: 关于Net::Telnet 模块的一个问题.
C:\Net-Telnet-Cisco-1.10>;ppm
PPM interactive shell (2.0) - type 'help' for available commands.
PPM>; install Net::Telnet::Cisco
Install package 'Net-Telnet-Cisco?' (y/N): y
Retrieving package 'Net-Telnet-Cisco'...
HTTP POST failed: 500 (Script Error), in SOAP method call. Content of respo
Script failed to send data. at C:/perl/site/lib/PPM/SOAPClient.pm line 222
作者: xiacs    时间: 2003-05-16 15:03
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:
install net-cisco-telnet
这句成功就安装完了



帮我  折腾了n个小时了   没有头绪   现在头昏眼花的 ......
作者: rootstock    时间: 2003-05-17 10:14
标题: 关于Net::Telnet 模块的一个问题.
你直接去下载这个包,然后用 perl makefile.pl
perl install.pl
nmake
perl test.pl
作者: xiacs    时间: 2003-05-17 14:22
标题: 关于Net::Telnet 模块的一个问题.
原帖由 "rootstock" 发表:
你直接去下载这个包,然后用 perl makefile.pl
perl install.pl
nmake
perl test.pl


原来是没有安装 net::telnet

要先安装这个  然后 安装 net::telnet::Cisco

perl makefile.pl
nmake
nmake test
nmake install

谢谢你
作者: laputa73    时间: 2006-07-27 17:21
大家用NET:telnet模块都不用print()和waitfor()方法的么?
标准的login(),cmd()方法局限性很大,基本用处很小
一般在登陆设备都是用
waitfor("/username|login/i")
print($UserName);
waitfor("/password/i")
print($Password);
waitfor("/$Prompt|#|>|\\\$/i")

其实telnet和expect原理差不多。
用expect还可以实现ssh登陆
ps.
expect的前提是本地已经有了telnet命令
而net::telnet就是独立实现了telnet命令
作者: fdsgsdfew    时间: 2006-07-27 19:45
呵呵,原来啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2