プロが教える店舗&オフィスのセキュリティ対策術

Perl LWPでのIPv6接続がエラーでつながらず、原因がわかりません。

記載しているソースで、Localhostに接続すると、LWP::UserAgentはエラーとなりますが
HTTP::Tiny、wgetコマンドは、問題ありません。(IPv4の場合は、LWPも問題ありません)。

どなたか、よい解決へのお知恵をよろしくお願いします。

perl 5.16.1
CentOS 5.9

------ソース-----
#!/usr/bin/perl
use strict;
use Net::INET6Glue;

my $uri = 'http://[::1]';

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->get($uri);
print $res->content,"\n";

print "********************************\n";

use HTTP::Tiny;
my $http = HTTP::Tiny->new;
my $response = $http->get($uri);
print $response->{content}, "\n";


-----結果-----
Can't connect to ::1:80 (接続を拒否されました)

LWP::Protocol::http::Socket: connect: 接続を拒否されました at /usr/local/perl-5.16.2/lib/site_perl/5.16.2/LWP/Protocol/http.pm line 51.

********************************
<html><body><h1>It works!</h1></body></html>


---環境---
This is perl 5, version 16, subversion 2 (v5.16.2) built for x86_64-linux

cpan[1]> i /INET6/
Reading '/root/.cpan/Metadata'
Database was generated on Fri, 01 Mar 2013 03:17:03 GMT
Distribution SHLOMIF/IO-Socket-INET6-2.69.tar.gz
Distribution SULLR/Net-INET6Glue-0.5.tar.gz
Module = IO::Socket::INET6 (SHLOMIF/IO-Socket-INET6-2.69.tar.gz)
Module = Net::INET6Glue (SULLR/Net-INET6Glue-0.5.tar.gz)
Module = Net::INET6Glue::FTP (SULLR/Net-INET6Glue-0.5.tar.gz)
Module = Net::INET6Glue::INET_is_INET6 (SULLR/Net-INET6Glue-0.5.tar.gz)
Module < Net::Patricia::AF_INET6 (PHILIPP/Net-Patricia-1.19.tar.gz)
Module < Net::Whois::Object::Inet6Num (AASSAD/Net-Whois-RIPE-2.002.tar.gz)
8 items found

A 回答 (2件)

モジュールの中の処理を追っていくとNet::HTTP::Methodsの中の


http_configureというルーチンが、おかしなことをしているようです。

http_configureの前
$VAR1 = {
'Proto' => 'tcp',
'PeerAddr' => '::1',
'SendTE' => 1,
'PeerPort' => 80,
'LocalAddr' => undef,
'KeepAlive' => ''
};

http_configureの後
$VAR1 = {
'Proto' => 'tcp',
'PeerAddr' => '::1',
'PeerPort' => 1,
'LocalAddr' => undef
};

となって、ポート番号が1にかわっています。IPv6のアドレス記法に使われるコロン(:)と
URLでポート番号を指定するときの記法(localhost:8080など)の
コロン(:)を区別していないようです。

Linuxを使っているのでしたら、/etc/hostsに
::1 ip6-localhost ip6-loopback
などが登録済みと思うので、http://ip6-localhostで試すといいかもしれません。

この回答への補足

解析までして頂いてありがとうございます。

実環境が職場なので、週明けに試して見ます。

補足日時:2013/03/02 23:20
    • good
    • 0
この回答へのお礼

hosts登録で解決しました。

本当に助かりました、ありがとうございます。

お礼日時:2013/03/04 13:00

perl + IPv6 - LWPをPatchなしでIPv6対応にする


http://blog.livedoor.jp/dankogai/archives/511860 …

手元の環境でなぜかIPv6接続できないので、試していませんが。

この回答への補足

早速の回答ありがとうございます。

>perl + IPv6 - LWPをPatchなしでIPv6対応にする
これも試しましたがダメでした・・・

あと、「Net::INET6Glue::INET_is_INET6;」もダメだったのです・・・
これらを追加する前は、「Bad hostname」が出てたので、INET6に移行は出来ているはずと思っています。

補足日時:2013/03/02 00:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!