Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Target `.` in SRV records is returned as empty string instead

未关闭
#234 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
42/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
php
领域
networking

调研方向

Start by tracing resolveAll() with Message::TYPE_SRV through the SRV response parsing path and compare handling of a target of "." with a normal hostname. Add a regression test for the _test2-style record and verify that the returned target is "." rather than an empty string.

由索引模型根据 Issue 内容生成。

描述

bug

Hey all,

Opening this ticket following the suggestion of a maintainer of movim in https://github.com/movim/movim/issues/1408, which uses this lib. I'm not very good at PHP so please bear with me 😅

I believe there might be something wrong the way react dns returns data from SRV records. I have set up two test SRV records as follows:

_test1._tcp.nadia.moe. 300 IN SRV 1 1 6969 nadia.moe.
_test2._tcp.nadia.moe. 300 IN SRV 1 1 0 .

They should return the expected when querying it:

22:43:36 ~/Staging/react-dns-repro $> dig +short SRV _test1._tcp.nadia.moe
1 1 6969 nadia.moe.
22:44:14 ~/Staging/react-dns-repro $> dig +short SRV _test2._tcp.nadia.moe
1 1 0 .

Note the literal . when resolving _test2._tcp.nadia.moe. This . character is not present in the response from React/DNS:

<?php

use React\Dns\Config\Config;
use React\Dns\Resolver\Factory;
use React\Dns\Model\Message;

require __DIR__ . '/vendor/autoload.php';

$config = Config::loadSystemConfigBlocking();
if (!$config->nameservers) {
    $config->nameservers[] = '8.8.8.8';
}

$factory = new Factory();
$resolver = $factory->create($config);

$name='_test1._tcp.nadia.moe';
$resolver->resolveAll($name, Message::TYPE_SRV)->then(function (array $ips) use ($name) {
    var_dump($ips);
}, function (Exception $e) use ($name) {
    echo 'No IPv4 addresses for ' . $name . ': ' . $e->getMessage() . PHP_EOL;
});

$name='_test2._tcp.nadia.moe';
$resolver->resolveAll($name, Message::TYPE_SRV)->then(function (array $ips) use ($name) {
    var_dump($ips);
}, function (Exception $e) use ($name) {
    echo 'No IPv4 addresses for ' . $name . ': ' . $e->getMessage() . PHP_EOL;
});
array(1) {
  [0]=>
  array(4) {
    ["priority"]=>
    int(1)
    ["weight"]=>
    int(1)
    ["port"]=>
    int(6969)
    ["target"]=>
    string(9) "nadia.moe"
  }
}
array(1) {
  [0]=>
  array(4) {
    ["priority"]=>
    int(1)
    ["weight"]=>
    int(1)
    ["port"]=>
    int(0)
    ["target"]=>
    string(0) ""
  }
}

In the response above, one would expect target to be . instead of the empty string.

This is somewhat relevant because . has a special meaning for SRV records: As per https://datatracker.ietf.org/doc/html/rfc2782, clients must check for this value specified as a target, and understand by it that the service is not provided and should not attempt connection. In the case of movim, it is doing that in https://github.com/movim/movim/blob/5aaacc6b2e05f89fa41007cf7378a4568f648dde/linker.php#L144, but this check is failing as react dns does not return ., but an empty string.

I'm not entirely sure wheter this is expected behavior, but in case it was, perhaps it is worth stating somewhere.

主要语言
PHP
星标
542
派生
62
PR 合并指标
30 天内没有已合并 PR

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

reactphp/dns 的其他 Issue

查看 reactphp/dns 的全部 Issue

相似的 Issue

更多 PHP Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。