python实现一个简单的不断发送dns查询的功能

the code below:

import socket
import struct
import time
import random

def create_dns_query(domain="example123.com"):
    # DNS Header
    ID = random.randint(0, 65535)  # 随机查询ID
    FLAGS = 0x0100  # Standard query
    QDCOUNT = 1     # One question
    ANCOUNT = 0     # No answers
    NSCOUNT = 0     # No authority records
    ARCOUNT = 0     # No additional records
    
    # 构建DNS头部
    header = struct.pack('!HHHHHH', ID, FLAGS, QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT)
    
    # 构建查询部分
    query_parts = []
    for part in domain.split('.'):
        query_parts.append(bytes([len(part)]))
        query_parts.append(part.encode())
    query_parts.append(b'\x00')  # 终止符
    
    # 查询类型(A记录)和类(IN)
    query_type = struct.pack('!HH', 1, 1)  # TYPE=A, CLASS=IN
    
    # 组合所有部分
    query = header + b''.join(query_parts) + query_type
    return query

def send_dns_query(target_ip="192.168.202.254", port=53, interval=1):
    # 创建UDP socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    try:
        print(f"开始向 {target_ip}:{port} 发送DNS查询...")
        count = 0
        while True:
            try:
                # 创建并发送DNS查询
                query = create_dns_query()
                sock.sendto(query, (target_ip, port))
                count += 1
                print(f"已发送 {count} 个DNS查询包")
                time.sleep(interval)  # 等待指定的间隔时间
                
            except KeyboardInterrupt:
                print("\n停止发送...")
                break
            except Exception as e:
                print(f"发送出错: {e}")
                break
    
    finally:
        sock.close()

if __name__ == "__main__":
    # 可以修改目标IP、端口和发送间隔(秒)
    send_dns_query("192.168.1.1", 53, 1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值