任务6 通过网络服务分析DNS
Kali1 客户端 17.154
from scapy.all import *
pkt1 = IP(dst="192.168.17.154")/UDP(sport=12345, dport=53)/DNS(id=1000, qr=0, rd=1, qd=DNSQR(qname="www.hxl.com"))
#发送请求+等回包
ans1=sr1(pkt1)
#看回包
ans1.show()
#提取解析结果到baidu变量中
baidu = ans1[DNS].an[0].rdata
print(f"ping {baidu} ...")
#发ping包给baidu变量地址
pkt2 = IP(dst=baidu) / ICMP()
send(pkt2)
Kali2 服务端17.157
from scapy.all import *
import socket
# 1. 占用53端口(需root权限)
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 53))
print("B机:Listening on UDP port 53 ...")
while True:
data, addr = sock.recvfrom(1024) # 接收A机的DNS查询
client_ip, client_port = addr
# 解析查询的DNS事务ID和域名
dns_query = DNS(data)
query_id = dns_query.id
query_domain = dns_query.qd.qname.decode() # 提取查询的域名,如www.张三.com
# 2. 构造DNS响应:解析到B机自身IP,TTL为1000+学号
ttl = 1000 + 17 # 假设学号是123,需替换为自己的学号
resp = IP(dst=client_ip) / UDP(sport=53, dport=client_port) / DNS(
id=query_id, # 与查询ID保持一致
qr=1, # 1表示响应
aa=1, rd=1, ra=1,
qd=DNSQR(qname=query_domain), # 匹配查询的域名
an=DNSRR(
rrname=query_domain,
type="A",
ttl=ttl,
rdata="192.168.17.154" # B机自身IP
)
)
send(resp) # 发送响应
posted on 2025-11-23 19:21 suiseiseki 阅读(0) 评论(0) 收藏 举报
浙公网安备 33010602011771号