Perl IO::Socket::SSL:connect:网络不可达

4
任何使用Mail::IMAPClient的代码都会出现这个错误。为了验证,我使用了下面来自主题的示例:如何使用Perl在Gmail中进行身份验证?
#!/usr/bin/env perl -w
use strict; use warnings;
use Mail::IMAPClient;

# Connect to IMAP server
my $client = Mail::IMAPClient->new(
  Server   => 'imap.gmail.com',
  User     => $user,
  Password => $pass,
  Port     => 993,
  Ssl      =>  1,
  )
  or die "Cannot connect through IMAPClient: $@";

# List folders on remote server (see if all is ok)
if ( $client->IsAuthenticated() ) {
  print "Folders:\n";
  print "- ", $_, "\n" for @{ $client->folders() };  
};

# Say so long
$client->logout();

现在,我已经浏览了类似的问题,但从未见过像“网络不可达”这样奇怪的错误。实际上没有网络问题,ping命令正常工作。我已经安装了IO::Socket::SSL和Net::SSLeay。

$ echo -n | openssl s_client -connect imap.gmail.com:993

CONNECTED(00000003)
depth=2 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = imap.gmail.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=imap.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDWzCCAsSgAwIBAgIKFefcnAADAAA7OzANBgkqhkiG9w0BAQUFADBGMQswCQYD
VQQGEwJVUzETMBEGA1UEChMKR29vZ2xlIEluYzEiMCAGA1UEAxMZR29vZ2xlIElu
dGVybmV0IEF1dGhvcml0eTAeFw0xMTExMTgwMjAxMjRaFw0xMjExMTgwMjExMjRa
MGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1N
b3VudGFpbiBWaWV3MRMwEQYDVQQKEwpHb29nbGUgSW5jMRcwFQYDVQQDEw5pbWFw
LmdtYWlsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmv2pvvhXOyOA
Uq053VLGMAErgk2NcDzxWNB5PWwXHzkcFuZOa0q1YUlff6LaJurq5UctkOO+3mt1
L+/wcZiEzxTdfOclyJcY/qBsjz8qgG+4Kx3/dVlTYz2geUyxvGNibNQfuXpoI1M5
iUQ/FSaFIazXZ01tpb+mgCOtwzENMk8CAwEAAaOCASwwggEoMB0GA1UdDgQWBBRd
l+HsAH5IwfNuc25lLuryGEaXwzAfBgNVHSMEGDAWgBS/wDDr9UMRPme6npH7/Gra
42sSJDBbBgNVHR8EVDBSMFCgTqBMhkpodHRwOi8vd3d3LmdzdGF0aWMuY29tL0dv
b2dsZUludGVybmV0QXV0aG9yaXR5L0dvb2dsZUludGVybmV0QXV0aG9yaXR5LmNy
bDBmBggrBgEFBQcBAQRaMFgwVgYIKwYBBQUHMAKGSmh0dHA6Ly93d3cuZ3N0YXRp
Yy5jb20vR29vZ2xlSW50ZXJuZXRBdXRob3JpdHkvR29vZ2xlSW50ZXJuZXRBdXRo
b3JpdHkuY3J0MCEGCSsGAQQBgjcUAgQUHhIAVwBlAGIAUwBlAHIAdgBlAHIwDQYJ
KoZIhvcNAQEFBQADgYEAa6JYZBInXMfojI4bXLusfDlzZ6gnGtHxOO8hUZbDAwcL
t2/4uDDj8sroVrTWXMqURzk1lCsXlGPFhaKdnsMrmcgC01THAKPFrrQnQc/BM5H/
kr5ZAyJKHyu4dNnL3NNjig+22fp8slaLo25C95YQT5LiBL2qnAzLs4nWBzqih74=
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=imap.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority
---
No client certificate CA names sent
---
SSL handshake has read 1850 bytes and written 299 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: D98F3659858A0F39D32F1B5D96F756DE6E093E849A6AE0066C391BE2881B9A69
    Session-ID-ctx: 
    Master-Key: 8D4BE4DFEB7F3218A501FE9240E0B51CC987B99EE0DDBA5EC13E9A10137B63508692DA684DA25E8B2839906F0F7ADDD5
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 100800 (seconds)
    TLS session ticket:
    0000 - 6e 26 64 bb c3 97 30 9c-32 6f c5 38 d6 db 23 54   n&d...0.2o.8..#T
    0010 - 65 43 b8 01 4e 46 5b b3-81 7e 26 6b 3a 36 2b 62   eC..NF[..~&k:6+b
    0020 - 03 96 44 de 3d b0 81 be-18 b0 14 a1 09 99 28 73   ..D.=.........(s
    0030 - 2d 5a 87 6c b9 26 64 94-af f2 5e f1 f4 10 ba ff   -Z.l.&d...^.....
    0040 - 68 a0 6a 31 d6 10 f8 88-61 63 5a 58 0b 1d d0 98   h.j1....acZX....
    0050 - 81 ed f7 45 11 1d 4a 22-23 2f 44 0c 62 b4 18 e9   ...E..J"#/D.b...
    0060 - e7 4a 57 10 f1 3c a0 d6-ee 46 98 5d df e9 a5 52   .JW..<...F.]...R
    0070 - a6 75 da a6 25 89 87 f0-b0 ec 60 0d c0 19 0e 6f   .u..%.....`....o
    0080 - 23 53 a2 f2 18 e8 8d 51-28 e7 f2 d3 52 8a 02 f4   #S.....Q(...R...
    0090 - 32 aa 82 db                                       2...

    Start Time: 1342180574
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
DONE 

对我来说可以工作。你在哪里遇到了问题?错误信息是来自构造函数吗? - daxim
是的,Mail::IMAPClient->new() 在这里失败了,而这个主题的标题是错误信息“IO::Socket::SSL: connect: Network is unreachable”。 - Roy
“Network unreachable”与Perl或SSL无关,它是一个网络拓扑问题。 - user207421
但是“telnet imap.gmail.com 993”可以运行,ping和nslookup也可以。 - Roy
请还附上echo -n | openssl s_client -connect imap.gmail.com:993的结果。 - daxim
通过这段代码,我现在可以看到的是,如果我提供IP地址而不是主机名,它就能正常工作。因此,IMAPClient可能正在调用某些函数来将其解析为IP,但这些函数可能会失败。但是,“Socket”中的gethostbyname()、inet_ntoa()等函数都能正常工作。您是否考虑过IMAPClient是否需要更多的东西? - Roy
1个回答

6
这可能是一个IPv6错误。Gmail最近启用了IPv6访问。您可以在“use Mail :: IMAPClient;”行之前尝试添加以下内容:
use IO::Socket::SSL 'inet4';

嗯,无论如何,我能够很好地运行您提供的脚本。您使用的是什么Perl和操作系统? - MichielB
感谢@MichielB。Perl v5.10.1在CentOS 6(64位)上。 - Roy
在相同的环境下可以正常运行代码。你的网络是什么样子的?你是否启用了IPv6网卡?你是否启用了IPv6网络? - MichielB
也适用于我!干杯! - NikosM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接