任务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)    收藏  举报

导航