我正在尝试编写一个Perl脚本来显示各种服务器的用户信息。然而,whois服务器在回复中返回所有类型的免责声明和其他文本。Raw确实有删除这些免责声明的选项,但是我不能让它工作。
下面是我尝试的方法:
#!/usr/bin/perl
use strict;
use warnings;
my $OMIT_MSG = 2;
my $CHECK_FAIL = 2;
my $USE_CNAMES = 1;
use Net::Whois::Raw qw(whois $OMIT_MSG $CHECK_FAIL $USE_CNAMES);
die "Incorrect arguments\n" unless (@ARGV);
for (my $i = 0; $i < @ARGV; $i++)
{
print "\nWhois info : " . $ARGV[$i] . "\n\n\n";
eval
{
my $whoisinfo = whois($ARGV[$i]);
print $whoisinfo;
};
if ($@)
{
print "Error while retrieving whois details.";
}
print "\n";
}如果这可能是一个愚蠢的问题,我很抱歉,但是有人能指出我在这里做错了什么吗?
提前谢谢。
发布于 2013-05-30 02:22:37
可能不完全是你想要的,但是我现在正在做一些工作来解析原始的whois数据库文件(你可以从‘ftp://ftp.ripe.net/ / database’目录中下载完整的文件)
像您一样,我想过滤掉免责声明,但我有不同的需求,主要是在将文件提供给数据库脚本以插入数据库之前对文件进行预处理。
无论如何,我使用以下命令行预过滤纯文本数据库文件:
cat ripe.db.as-block | grep -v '^\s*#' | grep -v '^remarks:\s*\*'接下来,您可以通过管道将输出输入到perl脚本中,或者使用>操作符将其写入一个新文件,然后使用perl脚本处理该新文件。
这也可以使用sourceforge的GnuWin32工具集在windows上运行,它提供了windows兼容的命令行二进制文件来镜像它们的linux计数器部分,但是您需要调整引号,主要是从‘到’。
例如,它剥离了什么:
这个..。
#
# The contents of this file are subject to
# RIPE Database Terms and Conditions
#
# http://www.ripe.net/db/support/db-terms-conditions.pdf
#
as-block: AS1877 - AS1901
descr: RIPE NCC ASN block
remarks: These AS Numbers are further assigned to network
remarks: operators in the RIPE NCC service region. AS
remarks: assignment policy is documented in:
remarks: <http://www.ripe.net/ripe/docs/asn-assignment.html>
remarks: RIPE NCC members can request AS Numbers using the
remarks: form available in the LIR Portal or at:
remarks: <http://www.ripe.net/ripe/docs/asnrequestform.html>
org: ORG-NCC1-RIPE
admin-c: DUMY-RIPE
tech-c: DUMY-RIPE
mnt-by: RIPE-DBM-MNT
mnt-lower: RIPE-NCC-HM-MNT
changed: unread@ripe.net 20000101
source: RIPE
remarks: ****************************
remarks: * THIS OBJECT IS MODIFIED
remarks: * Please note that all data that is generally regarded as personal
remarks: * data has been removed from this object.
remarks: * To view the original object, please query the RIPE Database at:
remarks: * http://www.ripe.net/whois
remarks: ****************************结果如下所示:
as-block: AS1877 - AS1901
descr: RIPE NCC ASN block
remarks: These AS Numbers are further assigned to network
remarks: operators in the RIPE NCC service region. AS
remarks: assignment policy is documented in:
remarks: <http://www.ripe.net/ripe/docs/asn-assignment.html>
remarks: RIPE NCC members can request AS Numbers using the
remarks: form available in the LIR Portal or at:
remarks: <http://www.ripe.net/ripe/docs/asnrequestform.html>
org: ORG-NCC1-RIPE
admin-c: DUMY-RIPE
tech-c: DUMY-RIPE
mnt-by: RIPE-DBM-MNT
mnt-lower: RIPE-NCC-HM-MNT
changed: unread@ripe.net 20000101
source: RIPE过滤的诀窍是使用反向grep,它是命令行中的'-v‘,它本质上是让每一行都通过,除了那些匹配模式的行,而不是它的正常调用,在正常调用中,它用于选择想要的行。
如果您有额外的条件需要在处理之前过滤掉,那么您所需要做的就是使用管道字符将更多倒置的grep命令通过管道传输到最后。
发布于 2013-05-30 02:39:14
我可能完全错了,因为我不经常使用Perl,也不太了解use的机制,但是由于$OMIT_MSGS是从模块导出的,我可能会认为您不想用my预先声明它,而是希望在加载模块之后(但在进行任何函数调用之前)对其进行赋值:
use Net::Whois::Raw qw(whois $OMIT_MSG $CHECK_FAIL $USE_CNAMES);
$OMIT_MSG = 2;
$CHECK_FAIL = 2;
$USE_CNAMES = 1;发布于 2014-06-10 06:34:14
use Net::Whois::Raw;
$Net::Whois::Raw::OMIT_MSG = 1;
my $domain_info = whois('perl.com');这是可行的。它剥离了文档中用作示例的Perl.com和Funet.fi域。但是,正如文档所说,它并不适用于所有领域。
https://stackoverflow.com/questions/16394113
复制相似问题