免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-23 15:49 |只看该作者 |倒序浏览
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;
不知道为什么每次用户名和密码不匹配的时候,就退出整个程序了.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 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在這行....
請參照上面網頁...裡面的範例修改你的程序...

论坛徽章:
0
3 [报告]
发表于 2003-04-23 17:39 |只看该作者

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

ok,这些信息足够了,我去试试,再次表示感谢,aplie,我心目中的hacker.

论坛徽章:
0
4 [报告]
发表于 2003-04-23 18:20 |只看该作者

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

aplie啊,如果你不能登陆上去怎么取匹配提示富了?还有默认的誊录login passwd都能匹配到的,信息是:不正确的的用户名的密码就完了,而如果成功就给我一个1,这个应该是成功了$result被赋予的直.能在给点提示2>;?

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 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
6 [报告]
发表于 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的話...我以前有貼過..你可以去找找..

论坛徽章:
0
7 [报告]
发表于 2003-04-24 12:04 |只看该作者

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

apile您误会我意思了,看程序可以看出是从一个user文件里面读出用户名,然后测试是否有用户名和密码重复的用户,所以前提是你并不知道那个用户的确定密码,可以说是一个暴力猜测密码的script.当程序发现用户名和密码不对的时候就自动退出不继续执行了,这个问题没有解决,应为如果我从来没有登陆上这个机器的话怎么知道是什么提示符了??^_^.

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 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
9 [报告]
发表于 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裡面的程序即可...

论坛徽章:
0
10 [报告]
发表于 2003-04-25 21:21 |只看该作者

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

恩,这个问题解决了,感谢的话就不说了阿.^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP