Perl Shell执行

时间:2011-12-25 18:46:48

标签: perl

我确定你们都使用了Metasploit

在Metasploit中,当用户按下回车键或键入任何命令Metasploit执行它时,返回msf:>

我想知道如何在Perl中执行此操作(几乎可以创建一个Perl shell,它执行命令并使用该小标识符返回)。

while (1) {
    if (<STDIN> eq defined) {
        print ">>"
    }

    $command = <STDIN>;
    if ($command =~ m/help/) {
        print "Help is on its way";
    } elsif ($command =~ m/exit/) {
        exit (1);
    }
}

3 个答案:

答案 0 :(得分:2)

看看Term :: * modules

Term::ReadLine

Term::Shell

答案 1 :(得分:1)

按照大卫的回答,我有时间宣传ZoidbergZoidberg是另一个Perl shell(如PSh),但它是模块化的,可嵌入的和可扩展的。

  1. 您可以使用Zoidberg::Shell为您的应用程序构建shell,或
  2. 您可以使用Zoidberg::Fish插件系统为您的需求构建一个插件,该插件可以在Zoidberg内部运行。它很可能定义一些命令,可能还有语法和操作模式。这个典型的例子是一个SQL插件,它允许Zoidberg识别SQL语句,然后将它们传递给等待的数据库句柄并直接从shell内部返回结果!
  3. 碰巧,我是新的维护者。 Zoidberg刚刚在几年内首次发布,它纠正了多年来出现的几个漏洞。因此,虽然我还不是它的专家,但我可能最接近存在。

    zoiduser手册页上开始阅读Zoidberg,然后在zoiddevel了解有关插件的更多信息。

答案 2 :(得分:0)

实际上有一些名为 Perl Shell (psh)的内容,可从CPAN档案中获取。

我还没试过,但文档就在那里:

$ cpan
cpan> install Psh

修改

我玩了一下。我不得不改变PS1所以它不会干扰Psh。最初,我的PS1设置为:

PS1=$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")

但是,Psh并不喜欢它。相反,如果我使用Bash设置,它的效果很好:

PS1="\u@\h:\W: PSH> "

启动时我也会收到以下警告:

Using an array as a reference is deprecated at /Library/Perl/5.12/Psh/StrategyBunch.pm line 260.
Using an array as a reference is deprecated at /Library/Perl/5.12/Psh/Strategy/Darwin_apps.pm line 47.

但它确实启动了。我还没有想出shell历史编辑,但它确实需要Perl脚本:

david@DaveBook:david: PSH> foreach $foo (<*>) {
> print "$foo\n";
> }