0
添加長度前綴DNS請求在RFC 1035 DNS左右,這是寫:使用TCP和Scapy的
4.2.2。 TCP使用情況
通過TCP連接發送的消息使用服務器端口53(十進制)。 消息以2字節長度字段爲前綴,該字段給出消息長度 ,不包括兩個字節長度字段。這個長度爲 的字段允許低級處理在開始解析它之前組裝完整的消息 。
我想用TCP發送DNS請求,但我不知道如何在DNS請求前添加這兩個字節。我嘗試使用該代碼:
from scapy.all import *
ip=IP(dst="216.239.32.10")
request = DNS(rd=1, qd=DNSQR(qname = "google.be", qtype="A")) #size = 27(dec) = 1b (hex)
twoBytesRequestSize = "\x1b\x00"
completeRequest = str(request) + twoBytesRequestSize
SYN=ip/TCP(sport=RandNum(1024,65535), dport=53, flags="S", seq=42)
SYNACK=sr1(SYN)
ACK=ip/TCP(sport=SYNACK.dport, dport=53, flags="A", seq=SYNACK.ack, ack=SYNACK.seq + 1)
send(ACK)
DNSRequest = ip/TCP(sport=SYNACK.dport, dport=53, flags="PA", seq=SYNACK.ack, ack=SYNACK.seq + 1)/completeRequest
DNSReply = sr1(DNSRequest, timeout = 1)
但是我的paquet被解釋爲一個沒有DNS層的簡單TCP數據包。
你有想過在DNS請求之前添加這兩個字節前綴嗎?
謝謝!
你究竟在做什麼?只需查看DNS A記錄?如果是這樣,有更簡單的方法。 – 2013-03-26 13:58:37
不確定它是否有幫助,但互聯網協議通常是大端,這意味着你需要'\ x00 \ x1b'而不是'\ x1b \ x00'。 – 2013-03-26 14:04:23
John,我需要檢索DNS服務器的時間戳,並且我無法在SYNACK響應中獲取它,因爲某些SYNCOOKIES實現使用時間戳選項。 阿明,它的工作原理,你是這一天的人!我非常肯定,我已經嘗試過與大前鋒。謝謝。 – Comtention 2013-03-26 14:49:39