1

这是我第一次在论坛上写文章。通常只需阅读就足以找到我正在寻找的东西。

我对 Perl 有很好的基础,我想用它做渗透测试。我的问题是,我发现的每一个教程或书籍都适用于面向对象的 LWP,坦率地说,我讨厌面向对象的编程(它对我来说没有函数式编程那么有意义)。如果有任何 CPAN 模块可以在没有 OOP 的情况下进行“Web 编程”,Google 很害羞地告诉我。

尽管必须做很多工作,但我想编写一个类似 LWP 的模块,但使用函数式编程而不是 OOP。

我的主要问题是我从哪里开始?我发现很少使用不使用 LWP 或某些非核心 Perl 模块的 Perl 进行套接字编程。我使用 CPAN 的次数越少,我就越高兴。

我知道这有点像重新发明轮子,但我想这样做主要是为了好玩,有时这是最好的学习方式。

4

2 回答 2

2

socket, bind,listen并且accept将是您正在寻找实现服务器端功能的最基本功能;socket并且connect是客户端的。

套接字:客户端/服务器通信部分perldoc perlipc应该提供进一步的建议。那里提到的函数直接映射到相应的系统调用。比你想不到的更底层(也更痛苦)。

作为一个极度复杂和臃肿的 OOP 的强烈反对者,我想给你一些建议,让你看看在 Perl 中完成 OOP 的方式。也许你会像我曾经一样深深地爱上它。

只不过是blessed 自己散列。不愿意使用任何 Perl 对象或多或少等同于根本不愿意使用任何散列。

于 2015-07-12T21:43:49.173 回答
2

我强烈建议您学习 Perl 处理面向对象编程的方式。我相信它是迄今为止对 OOP 最好的介绍,因为它什么都没有隐藏,并且所有的机制都暴露出来了。一个类是一个包,一个方法是一个子例程,而你的构造函数只是另一个方法

如果您正在编写小型实用程序,您可能不需要自己创建 Perl 类,但是一旦您想使用其他人的库,您可能会发现自己需要知道如何使用 OO Perl

LWP可能是更复杂的库之一,因为它有许多不同的类,但请记住,文档必须完整地描述功能,至少在最初,您不会使用很多可用的东西

要获取一个简单的网页,您需要做的就是创建一个LWP::UserAgent对象并将其用于get您感兴趣的 URL

use LWP;

my $ua = LWP::UserAgent->new;
my $res = $ua->get('http://www.example.com/');

您现在有了一个HTTP::Response对象 ,$res您可以阅读该类的文档以了解它支持哪些方法,例如检查状态和检索 HTTP 标头和消息正文

这几乎就是简单 LWP 编程的全部内容,但如果您需要,还有许多选项可用于处理更复杂的情况

最后,值得指出的是,已经有一个功能性的 HTTP 模块,名为LWP::Simple. 如果你想要非常基本的功能,那么你可以只写

use LWP::Simple;

my $body = get('http://www.example.com/');

并且您已检索到一个网页。当然,这不允许您检查 HTTP 事务的状态和响应消息中的标头,因此如果您需要该功能或更多功能,则需要使用标准 LWP 接口

于 2015-07-13T02:12:18.973 回答