使用Perl轻松检查您的IP地址

偶尔会遇到需要程序化检查IP地址的问题。每次我都会手动制作解决方案,这没问题,但良好的编程是DRY(不要重复自己)编程,所以我最终写了一个模块来做这件事。这个模块叫做WWW::curlmyip,因为它使用了curlmyip.com服务。我发现这个模块很有用,你可能也会。

核心Perl解决方案

在我们查看模块之前,让我们考虑一个仅使用核心Perl代码的Perl解决方案。我可以用一行Perl从终端获取我的IP地址

$ perl -MHTTP::Tiny -e 'print HTTP::Tiny->new->get(q{http://curlmyip.com})->{content}'
121.45.140.5

提示:如果你在Windows上,请使用双引号而不是单引号。

这很简单。但请注意,我没有将换行符追加到输出中?这是因为curlmyip.com返回带有换行符的IP地址。如果我们想将IP地址作为其他程序的输入,我们需要使用chomp来移除那个换行符。代码将变成

$ perl -MHTTP::Tiny -E '$ip=HTTP::Tiny->new->get(q{http://curlmyip.com})->{content}; chomp $ip; say $ip'
121.45.140.5

这不再那么干净了,对吧?事实上,这根本不能算作“一行代码”。如果我想要添加异常处理,比如die并打印有用的错误消息呢?一旦你到了这个阶段,就是时候考虑将代码放入模块中了。

使用WWW::curlmyip

该模块导出了一个get_ip函数,它返回IP地址。使用起来超级简单

use WWW::curlmyip;

my $ip = get_ip();

到目前为止,一切顺利。但你能用这个信息做什么呢?过去,我编写过程序在连接VPN或TOR时检查我的IP地址,以确认我的真实IP已被隐藏。另一个明显的用例是地理位置

#!/usr/bin/env perl

use WWW::curlmyip;
use Geo::IP;

my $ip = get_ip();

my $geoip = Geo::IP->open('GeoLiteCity.dat', GEOIP_STANDARD);
my $record = $geoip->record_by_addr($ip);

print "You are in $record->{region_name}, $record->{country_code}\n";

在这段代码中,我检索了我的IP地址,然后使用MaxMind的Geo::IP模块查找我的位置。将代码保存为whereami.pl并运行它将输出

$ whereami.pl
You are in New York, US

地理位置数据也可以用作上周天气脚本的输入,以自动检索您所在地区的天气预报。

结论

这是一个简单的任务,但希望WWW::curlmyip使获取您的IP地址变得更容易。如果您对Geo::IP感兴趣,请查看Gabor Szabo最近关于如何安装它的指南。最后,如果您想在一次请求中获取您的IP地址和位置,请查看我的另一个新模块,WWW::ipinfo


这篇文章最初发布在PerlTricks.com

标签

David Farrell

David是一位专业程序员,他经常推文博客关于代码和编程艺术。

查看他们的文章

反馈

这篇文章有什么问题吗?请通过在GitHub上打开问题或拉取请求来帮助我们。