搜索互联网RFC文档
在隔离期间,我找到了家庭隔离的积极一面:由于学校的考试,我没有足够的时间读书,但幸运的是,我有足够的时间阅读一两个请求评论(RFC)文档。
自从我开始学习计算机安全以来,"协议"这一概念一直吸引着我。也许是因为它们几乎在每一个计算机系统中都有巨大的传播,我们的日常生活很大程度上依赖于这些过程。正如我所说:"相信机器但不要相信人类"。RFC方法让人联想到开源哲学,它们有相同的目标(通过共享给每个人学习新事物的机会)和相同的传播渠道:互联网。
我在IETF网站上很难找到这些文档,所以我编写了一个快速高效的脚本,可以通过关键字下载RFC,并让我决定哪些要阅读,哪些要忽略。
RFC是什么?
“请求评论”是学习网络在协议层面上如何真正工作的最佳在线参考资料之一。这些只是定义互联网工程任务组批准的每个标准的文本文档。这些文档是研究协议分析的好入门点:一个使用形式验证来查找漏洞的新兴领域。
每个RFC都有一个标题和其关联的编号,例如RFC 3607是“回顾中国彩票密码分析:互联网作为密码破解工具”。
我的脚本使用Net::RFC::Search进行搜索,并使用Term::ANSIColor进行显示——终端中会有很多文本,不同的颜色可以帮助!。
#!/usr/bin/perl
# Made by Edoardo Mantovani in 2020
use strict;
use warnings;
use File::Path qw(make_path);
use File::Spec::Functions;
use LWP::Protocol::https; # Net::RFC::Search needs this
use Net::RFC::Search;
use Term::ANSIColor;
my $folder = shift or die "./RFC <Folder> <Query>\n";
my $query = shift or die "./RFC <Folder> <Query>\n";
make_path $folder;
my $rfc_interface = Net::RFC::Search->new();
my @rfc_nums = $rfc_interface->search_by_header( $query );
print "RFCs [@rfc_nums]\n";
foreach my $rfc_num ( @rfc_nums ) {
my $local_file = catfile( $folder, $rfc_num ); # i.e final folder = /tmp/1110
if ( $rfc_interface->get_by_index( $rfc_num, $local_file ) ) {
print colored( "Downloaded: $rfc_num\n", "green" );
view_rfc( $local_file );
}
else {
print "Error with RFC $rfc_num\n";
}
}
sub view_rfc {
my( $file ) = @_;
open my $fh, '<', $file or do {
warn "Could not open file [$file]: $!\n";
return;
};
while( <$fh> ) {
print;
next unless $. == 25;
print colored("Do you want to save this RFC? [Y/N] ", "red");
my $input = <STDIN>;
chomp( $input );
unlink $file if uc($input) eq "N";
last;
}
}
运行程序需要一个目录名和一个查询。如果目录不存在,我将创建它
$ ./rfc_search rfcs cookie
我显示每个匹配RFC的前25行,并提示保存它。
工作原理
search_by_header
返回具有查询词的每个文档的RFC编号
my @rfc_nums = $rfc_interface->search_by_header( $query );
然后我通过指定编号和本地文件名来获取每个文档。即使我不会保留它,我也这样做,因为我还不知道里面的内容
$rfc_interface->get_by_index( $rfc_num, $local_file );
对于最后一部分,我查看文件的前25行。我有一个提示,问我是否想保存它。如果输入“N”,我就删除该文件。我将提示着色,以便我可以将其与RFC文本区分开来
sub view_rfc {
my( $file ) = @_;
open my $fh, '<', $file or do {
warn "Could not open file [$file]: $!\n";
return;
};
while( <$fh> ) {
print;
next unless $. == 25;
print colored("Do you want to save this RFC? [Y/N] ", "red");
my $input = <STDIN>;
chomp( $input );
rmtree(@_) if uc($input) eq "N";
last;
}
}
其他用途和建议
我主要编写了这个简单的脚本以节省时间并拥有更好的与RFC网站交互的界面,我建议查看Net::RFC::Search页面中的TODO部分。为了编写更好的脚本,最好实现curl
和lynx
来检索已取消的RFC。当然,可以使用自定义函数实现脚本,但这个脚本仅用于教育目的。
资源 - 请求评论:用户故事和场景 - 维基百科的RFC条目
标签
反馈
这篇文章有问题吗?请通过在GitHub上打开问题或拉取请求来帮助我们