【问题标题】:create nameserver hex header创建名称服务器十六进制标头
【发布时间】:2012-11-16 09:50:35
【问题描述】:

我必须向名称服务器发出请求。 socketpart 的工作就像一个魅力,但要创建包我有一些问题。

$domainname = "google.nl";

$hexdomain = ascii2he($domainname);

$package = "\x01\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x0b".$hexodmain."\x00\x00\xff\x00\x01";

这应该是我发送到名称服务器的包,但包不正确。创建 $package 的正确方法是什么

【问题讨论】:

    标签: php sockets wireshark nameservers


    【解决方案1】:

    首先,您传递给名称服务器的名称不是点分隔的,而是名称的每一部分都是分开传输的。

    其次,你不发送转换为十六进制的数据,而是直接发送。十六进制 (\x01\x01) 只是表示形式。

    因此,您可以将google.nl 编码为"\x06google\x02nl\x00" 的形式,因为每个名称部分前面都有它的长度,最后一个后面是\x00,表示空字符串 - 这反过来表示名称链的末端。

    因此,为了保持可变性,您应该将您的域名拆分为多个组件,并在每个组件前面加上相应的长度字节。

    类似

    function domain2dns($domain)
    {
        $split = explode(".", $domain);
        $target = ""; // cumulate here
        foreach ($split as $part) {
            // For every $part, prepend one byte denoting its length.
            // strlen($part) is its length which is supposed to be put into one character.
            $target .= chr(strlen($part)).$part;
        }
        return $target . "\x00";
    }
    

    可能有用

    $domainname = "google.nl";
    
    $dnsdomain = domain2dns($domainname);
    
    $package = "\x01\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00" . $dnsdomain . "\x00\xff\x00\x01";
    

    【讨论】:

    • 所以我的包是:$package = "\x06google\x02nl\x00" 类似的东西?
    • @GertKommer 不,我只是指它的“名称部分”。它周围的数据包必须正确构建。我想您的"\x01\x01..." 是经过谨慎选择的,因此是正确的。
    • @GertKommer 更详细地说,根据firewall.cx/networking-topics/protocols/domain-name-system-dns/…,您的ID 为0x0101,一个标准查询和一个问题。所以你的数据包应该是"\x01\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00"."\x06google\x02nl\x00"."\x00\xff\x00\x01",第一部分来自你,第二部分是适当格式的主机名,第三部分是类型和类。
    • 但问题是它并不总是相同的。域名总是不同的,所以我需要在数据包中使用变量。像这样: "\x01\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x0b\x".$domain_lenght$domain"\x"$extension_lenght$extension"\x00\ x00\x00\xff\x00\x01" 但这会破坏数据包。
    • @GertKommer 一个通用的解决方案可能在这里有用。查看我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2019-10-25
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多