استخدام curl للحصول على نتائج DNS

يقدم مقدمة عن طريقتين لاستخدام أمر curl للحصول على نتائج استعلام DNS.

يقدم هذا المقال طريقتين لاستخدام أوامر curl للحصول على نتائج استعلام DNS:

  1. تنسيق JSON لـ DNS
  2. تنسيق Wire Format لـ DNS

1. استعلام DNS بتنسيق JSON

يُرجع استجابة DNS بتنسيق JSON، مما يسهل التحليل.

Google

curl -H 'accept: application/dns-json' "https://dns.google/resolve?name=baidu.com&type=A" | jq .

Cloudflare

curl -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=baidu.com&type=A' | jq .

Aliyun

curl -H "accept: application/dns-json" "https://223.5.5.5/resolve?name=baidu.com&type=1" | jq .

dns.pub

curl -H 'accept: application/dns-json' 'https://doh.dns.pub/dns-query?name=baidu.com&type=A' | jq .

AdGuard Private DNS

# غير مدعوم حاليًا

2. استعلام DNS بتنسيق Wire Format

يُرجع استجابة DNS بالتنسيق الثنائي، مما يتطلب تحليلًا إضافيًا.

Google

curl -H 'accept: application/dns-message' 'https://dns.google/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB'  | hexdump -c

Cloudflare

curl -H 'accept: application/dns-message' 'https://cloudflare-dns.com/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB'  | hexdump -c

Aliyun

curl -H 'accept: application/dns-message' "https://dns.alidns.com/dns-query?dns=P8QBAAABAAAAAAAABWJhaWR1A2NvbQAAAQAB"  | hexdump -c

dns.pub

curl -H 'accept: application/dns-message' 'https://doh.dns.pub/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB'  | hexdump -c

AdGuard Private DNS

curl -H 'accept: application/dns-message' 'https://public0.adguardprivate.com/dns-query?dns=q80BAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB'  | hexdump -c

استخدام Python لتحليل استجابات DNS

# pip install dnspython
# pip install requests
# تحليل استجابة JSON
import json
import requests

def query_dns_json(domain="example.com", type="A"):
  """استعلام DNS باستخدام تنسيق JSON"""
  url = "https://dns.google/resolve"
  params = {"name": domain, "type": type}
  headers = {"accept": "application/dns-json"}

  response = requests.get(url, params=params, headers=headers)
  return json.dumps(response.json(), indent=2)

# تحليل استجابة Wire Format
def query_dns_wire(domain="example.com"):
  """استعلام DNS باستخدام تنسيق Wire Format"""
  import dns.message
  import requests
  import base64

  # إنشاء رسالة استعلام DNS
  query = dns.message.make_query(domain, 'A')
  wire_format = query.to_wire()
  dns_query = base64.b64encode(wire_format).decode('utf-8')

  # إرسال الطلب
  url = "https://dns.google/dns-query"
  params = {"dns": dns_query}
  headers = {"accept": "application/dns-message"}

  response = requests.get(url, params=params, headers=headers)
  dns_response = dns.message.from_wire(response.content)
  return str(dns_response)

if __name__ == "__main__":
  print("نتيجة استعلام JSON:")
  print(query_dns_json())
  print("\nنتيجة استعلام Wire Format:")
  print(query_dns_wire())

إنشاء بيانات Base64 بتنسيق DNS Wire Format

# pip install dnspython
import base64
import dns.message
import dns.rdatatype

# إنشاء رسالة استعلام DNS
query = dns.message.make_query('example.com', dns.rdatatype.A)

# تحويل الرسالة إلى Wire Format
wire_format = query.to_wire()

# التحويل إلى base64
wire_format_base64 = base64.b64encode(wire_format).decode('utf-8')

# طباعة النتيجة
print(wire_format_base64)