2

dnspython ライブラリを利用した次の単純な Python スクリプトがあります。

import dns.query
import dns.tsigkeyring
import dns.update
import dns.rdatatype
import datetime
import sys

# Get data
current_ip = '1.2.3.4'

# Update DNS server
keyring = dns.tsigkeyring.from_text({
    'my.key.name' : 'xxxxxxxxxxxxxxxxxxxx=='
})

update = dns.update.Update('dyn.example.com', keyring=keyring)
update.replace('myhost', 60, dns.rdatatype.A, current_ip)
update.replace('myhost', 60, dns.rdatatype.TXT, "xxx yyy zzz")

response = dns.query.tcp(update, 'ns.example.com')

host コマンドの出力から明らかなように、これはかなりうまく機能しますが、何らかの理由で、私の TXT 値は各スペースと引用された各セグメントで分割されているようです。したがって、host コマンドからの出力は次のようになります。

$ host -t ANY myhost.dyn.example.com
myhost.dyn.example.com descriptive text "xxx" "yyy" "zzz"
myhost.dyn.example.com has address 1.2.3.4

なぜこれが起こっているのか、そしてそれを適切に行う方法を誰か教えてもらえますか?

$ host -t ANY myhost.dyn.example.com
myhost.dyn.example.com descriptive text "xxx yyy zzz"
myhost.dyn.example.com has address 1.2.3.4

かなり明白な何かが欠けているに違いありませんが、dnspython のドキュメントは例が少し不足しており、これまでのところ多くのグーグルは何も明らかにしていません。すべての助けを感謝して受け取りました。

4

1 に答える 1

4

私は答えを見つけたようです。

TXT レコードの値は引用符で囲む必要があります。つまり、文字列には引用符が含まれている必要があります。

update.replace('myhost', 60, dns.rdatatype.TXT, '"xxx yyy zzz"')

完全に動作します:

$ host -t ANY myhost.dyn.example.com
myhost.dyn.example.com descriptive text "xxx yyy zzz"
myhost.dyn.example.com has address 1.2.3.4

わーい :-)

于 2013-06-22T20:58:06.163 に答える