4 min read

Cloudflare 批量删除 DNS 解析

Cloudflare 批量删除 DNS 解析
Photo by Weichao Deng / Unsplash

域名从 name.com 转到 Cloudlare 以后导入了一大堆记录,总共有一百多条没用的解析。本想通过导入导出的方式覆盖,发现覆盖不了,但是 Cloudflare 的控制台又没有批量删除解析的功能,一条一条删实在太麻烦。只能通过 Cloudflare 的 API 功能来实现批量删除解析。

一、创建 API 令牌

1.1、打开 用户 API 令牌 页面,点击 创建令牌

https://dash.cloudflare.com/profile/api-tokens

image-20240608174201735

点击使用模板

image-20240608174222052

区域资源 右侧的下拉列表列表中选择你需要批量删除解析的域名,点击继续

image-20240608174238832

1.2、点击创建令牌

image-20240608174249149

保存令牌备用

image-20240608174301069

二、找到区域 ID

打开域名的概述页,下拉网页,在右下角找到 区域 ID

image-20240608174312682

三、执行批量删除

注意:脚本会删除指定域名的所有解析!

请将以下的 <API TOKEN> 替换为你之前创建的 API 令牌,将 <ZONE ID> 替换为域名的区域 ID。

然后右键脚本,点击 使用 PowerShell 运行,等待执行完成即可

Windows

如果你使用 Windows 系统,请使用以下 PowerShell 脚本。

$API_TOKEN = "<API TOKEN>"
  $ZONE_ID   = "<ZONE ID>"
  
  $baseUrl = "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records"
  
  $headers = @{
    'Authorization' = "Bearer $API_TOKEN"
    'Content-Type'  = "application/json"
  }
  
  $listUrl = $baseUrl + '?per_page=500'
  Write-Host $listUrl
  $records = Invoke-RestMethod -Uri $listUrl -Method 'GET' -Headers $headers
  $records = $records | Select-Object -ExpandProperty result
  
  foreach ($record in $records) {
    Write-Host "Deleting $($record.name) that points to $($record.content)"
  
    $deleteUrl = $baseUrl + '/' + $record.id
    Invoke-RestMethod -Uri $deleteUrl -Method 'DELETE' -Headers $headers
    Write-Host $deleteUrl
  }

macOS / Linux / BSD / Termux

请使用以下 Python 脚本。

  import requests
  
  API_TOKEN = "<API TOKEN>"
  ZONE_ID = "<ZONE ID>"
  
  baseUrl = f"https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records"
  
  headers = {
      'Authorization': f'Bearer {API_TOKEN}',
      'Content-Type': 'application/json'
  }
  
  listUrl = f"{baseUrl}?per_page=500"
  print(listUrl)
  response = requests.get(listUrl, headers=headers)
  records = response.json()['result']
  
  for record in records:
      name = record['name']
      content = record['content']
  
      print(f"Deleting {name} that points to {content}")
  
      deleteUrl = f"{baseUrl}/{record['id']}"
      requests.delete(deleteUrl, headers=headers)
      print(deleteUrl)

使用方法:

  1. 首先安装 Python 环境和 requests 库(如果没有安装的话)。
  2. 然后将脚本中的 <API TOKEN> 替换为你之前创建的 API 令牌,将 <ZONE ID> 替换为域名的区域 ID。
  3. 在脚本目录打开终端,并执行命令 python3 cf-del-records.py,等待执行完成即可。

1、本地计算机需要在设置中查找开发者选项,并允许开发者选择中本地运行powershell脚本。

img

2、参考链接: