使用端口(例如 localhost:12345)访问 IPv6 可解析 URL 会导致 Strawberry Perl 5.30.1 中的错误地址

2024-03-04

在启用了 IPv6 的 Windows 10 下使用 Strawberry Perl 5.30.1 时,由于 Perl 的 DNS 解析器中似乎存在错误,因此无法正确解析带有端口号的 URL。

对于以下测试,我们有一个简单的 Web 服务器,侦听端口 8810 的所有接口。

端口 12345 确实NOT托管任何东西。

以下是我们用于复制的脚本:

use strict;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new();
my $result=$ua->get("http://localhost:8810/");
print "(DNS Expect: Success) The server responded with Status Code ".$result->status_line.".\n";
$result=$ua->get("http://localhost:12345/");
print "(DNS Expect: Failure) The server responded with Status Code ".$result->status_line.".\n";
$result=$ua->get("http://127.0.0.1:8810/");
print "(IPv4 Expect: Success) The server responded with Status Code ".$result->status_line.".\n";

当使用 5.28.0 执行时,我得到了正确的响应

C:\perl-test>strawberry-perl-5-28-0-original\perl\bin\perl.exe test2.pl
(DNS Expect: Success) The server responded with Status Code 200 OK.
(DNS Expect: Failure) The server responded with Status Code 500 Can't connect to localhost:12345 (No connection could be made because the target machine actively refused it.).
(IPv4 Expect: Success) The server responded with Status Code 200 OK.

但是,当尝试使用 5.30.1 时,无论是否确实有端口打开,我都会得到错误地址

C:\perl-test>strawberry-perl-5-30-1-original\perl\bin\perl.exe test2.pl
(DNS Expect: Success) The server responded with Status Code 500 Can't connect to localhost:8810 (Bad address).
(DNS Expect: Failure) The server responded with Status Code 500 Can't connect to localhost:12345 (Bad address).
(IPv4 Expect: Success) The server responded with Status Code 200 OK.

请注意,如果我们直接提供 IPv4 地址,5.30.1 仍然能够实际请求信息。此外,对于不解析为 IPv6 而仅解析为 IPv4 的 DNS,5.30.1 似乎没有问题。

还有其他人有这个问题吗?如果是的话,这被认为是一个错误还是我们只是以某种错误的方式使用 Perl?

UPDATE:我发现了另一块似乎有贡献的拼图:

到目前为止,我们仅在我们的公司 Windows 机器上进行了尝试,所有机器在 Perl 5.30.1 和 5.30.2 上都有相同的行为。不过,我现在也尝试了我的私人 Windows 10,它成功了。

然后我深入研究了 IPv4 和 IPv6,并得出了这篇来自微软的知识库文章:https://support.microsoft.com/en-us/help/929852/guidance-for-configuring-ipv6-in-windows-for-advanced-users https://support.microsoft.com/en-us/help/929852/guidance-for-configuring-ipv6-in-windows-for-advanced-users

底线:我在注册表中设置 Windows 应该更喜欢 IPv4 而不是 IPv6(设置 0x20),重新启动 - 它在我的公司 Windows 10 上运行!

显然我们有一些与 perl 相关的设置,但似乎仍然有一个问题:当尝试访问无法访问的本地主机端口时,我们仍然收到“错误地址”错误而不是“连接被拒绝”,这意味着仍然有一些错误解析了我们的 dns:port 字符串。

另外,我希望 Perl 现在能够完全支持 IPv6。


我在 KVM 虚拟机(在 Ubuntu 20.04 上)中尝试了此操作,运行 Windows 10、Strawberry Perl 5.30.1、XAMPP 7.4.5,虚拟主机侦听 8080,根据控件中的网络和 Internet 设置启用 IPv4 和 IPv6控制板。

这似乎在这里工作正常,从你的输出test2.pl脚本是:

(DNS Expect: Success) The server responded with Status Code 200 OK.
(DNS Expect: Failure) The server responded with Status Code 500 Can't connect to localhost:12345 (No connection could be made because the target machine actively refused it.).
(IPv4 Expect: Success) The server responded with Status Code 200 OK.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用端口(例如 localhost:12345)访问 IPv6 可解析 URL 会导致 Strawberry Perl 5.30.1 中的错误地址 的相关文章

随机推荐

  • 无法使用 tsc 节点模块编译打字稿

    我正在尝试使用 tsc 节点包模块将打字稿编译为 JavaScript 首先 我使用安装了该模块npm install g typescript 在我的本地目录中 我创建了一个名为classes js 的文件 其中包含有效的打字稿代码 跑步
  • Neo4j 服务器与嵌入式模式

    我想确切地知道 neo4j 服务器和嵌入式模式是什么意思 即使我浏览了该帖子Neo4j 服务器与嵌入式 https stackoverflow com questions 8224523 neo4j server vs embedded 但
  • 使用 HTTP/2 时,缩小和连接 JS/CSS 文件以及使用图像精灵是否仍能提供性能优势?

    使用新的 HTTP 2 协议 向同一服务器重复 HTTP 请求所产生的开销已大大减少 考虑到这一点 缩小和连接 JavaScript CSS 文件以及将图像组合成精灵是否仍然具有任何显着的性能优势 或者当使用 HTTP 2 时这些做法不再有
  • EventSourced Saga 实施

    我已经编写了一个事件源聚合 现在实现了一个事件源传奇 我注意到两者是相似的 并创建了一个事件源对象作为两者派生的基类 我在这里看过一个演示http blog jonathanoliver com cqrs sagas with event
  • Android 手机启动时广播接收器不工作

    我为 ICS 创建了一个锁屏 并将其放置在框架中 我们可以使用它打开应用程序 对于用户效果 我在显示锁定屏幕时启动了动画 该动画是使用 SCREEN ON 广播接收器启动的 但是当手机启动时 即使我注册了广播接收器 它也没有到达 onRec
  • 与使用数据库相比,经典 ASP 和 PHP 之间共享会话

    我们有一个经过多年开发的 ASP 内联网 Web 应用程序 它在 IIS6 上运行 如今 我们希望使用 PHP 语言来添加一些新功能 PHP 在同一台服务器上运行良好 会话变量需要在 ASP 和 PHP 之间共享 我问是否有其他替代方案可以
  • 标记模板文字的 TemplateObject 数组是否被其领域弱引用?

    while c tag str0 e str1 JavaScript 运行时创建一个冻结数组 例如Object freeze str0 str1 但还有一个额外的 raw财产 可以使用该对象作为 a 中的键吗 WeakMap以避免每次循环时
  • 需要 Angular 2 ng

    我在 Angular 2 中制作了一个模型驱动表单 并且只有在未选中上面的复选框时才必须显示其中一个输入字段 我使用 ngIf 执行此操作 我的问题是 仅当未选中该复选框时 如何设置所需的输入 在 Angular 1 x 中 我可以通过视图
  • 递归 XSLT,第 2 部分

    好的 继续我的问题here https stackoverflow com questions 2907332 how can i write an xslt that will recursively include other file
  • 经常将 IRB 历史记录刷新到文件

    irb 可以将命令历史记录写入文件 但只有在 irb 会话结束时才会执行此操作 我想更频繁地写出我的命令历史记录 与每个命令 如 shell 历史记录 一样频繁 但不必如此频繁 是否有 irbrc 设置 或者我必须破解 irb 源 已经多次
  • 将鼠标悬停在图像上方的 Font Awesome 图标居中

    当鼠标悬停在图像上时 我试图将字体很棒的图标置于图像的中心 这是我的 HTML div class profile img container img src http s3 amazonaws com 37assets svn 765 d
  • 如何在 Xamarin Forms 中将 Android 日期选择器设置为微调器(而非日历)模式?

    在 Android 设备上的 Xamarin Forms 中选择日期选择器控件时 将显示日期选择器的日历模式视图 如何更改它以显示微调模式 我找到的唯一示例是更新我的 styles xml 这是我所拥有的 但不起作用
  • CSS 不同的链接样式

    据我所知 使用类似的东西 class a 与使用相同 class a link Right 另外 以下两种款式是一样的吗 class a focus class a hover 最后 下面的样式是鼠标按下时的颜色吧 class a acti
  • Zend Framework 2 - Hydrator 策略未响应且水合

    我基本上实现了这个策略 https github com zendframework zf2 pull 2072 主要区别是 我猜 我使用Doctrine2 调用构造函数类 打印测试回显 但两个函数extract and hydrate 不
  • LINQ:将 lambda 表达式作为参数传递以由方法执行和返回

    因此 场景如下 我有一系列不同的存储库类 每个类都可以使用独立的数据上下文或共享上下文 在使用隔离上下文的情况下 我想向基类添加一个方法 该方法允许我将 lambda 指定为参数 让该表达式由所选存储库的隔离上下文执行并返回 IQuerya
  • 如何设置 Bitmap.Width 和 Bitmap.height

    您好 我已经加载了位图 我需要设置自己的高度和宽度 bitmap height 100 但这个声明不允许我 因为它说 System Drawing Image Width cannot be assigned to it is read o
  • __del__() 如何干扰垃圾回收?

    I read class Account object def init self name balance self name name self balance balance self observers set def del se
  • 如何从 Jenkins 推送到 git?

    以下代码是 Jenkins 中的 执行 Shell 构建步骤 该作业从包含文件的存储库中提取ranger policies policies json 我想要做的是更新该文件 在本例中使用curl 命令 然后将更改提交到源代码管理并更新远程
  • Android模拟器中的相机

    我使用 android SDK 4 0 3 和 eclipse Indigo 我正在尝试开发一个使用相机的应用程序 当我拍照时 会出现以下消息 不幸的是 相机已经停止了 在 Eclipse 控制台中 模拟器 错误 camera client
  • 使用端口(例如 localhost:12345)访问 IPv6 可解析 URL 会导致 Strawberry Perl 5.30.1 中的错误地址

    在启用了 IPv6 的 Windows 10 下使用 Strawberry Perl 5 30 1 时 由于 Perl 的 DNS 解析器中似乎存在错误 因此无法正确解析带有端口号的 URL 对于以下测试 我们有一个简单的 Web 服务器