2013-06-22 6 views
1

나는 dnspython 라이브러리를 이용하여 다음과 같은 간단한 파이썬 스크립트가 : 그것은 합리적으로 잘 호스트 명령의 출력에 의해 입증으로 작동dnspython 동적 TXT 레코드를 공백으로 업데이트 하시겠습니까?

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') 

을하지만, 어떤 이유로 내 TXT 값이 각각의 공간 분할을 보인다 각 세그먼트는 인용했다. 그래서 호스트 명령의 출력과 같은 다음

$ 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에 대한 문서는 예제에 대해서는 짧으며 많은 인터넷 검색은 지금까지 아무 것도 밝히지 않았다. 모든 도움을 기꺼이 받아 들였습니다.

답변

3

답변을 찾은 것 같습니다.

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 

야호 :-)