Simple Golang DNS Server

Write A Simple DNS Server With Golang The following DNS knows how to answer A queries and it only knows IP address of domain. First we need to get the package: go get github.com/miekg/dns Then we have this code: package main import ( "fmt" "log" "strconv" "github.com/miekg/dns" ) var records = map[string]string{ "nguyenxuanquang.service": "192.168.1.15", }

Write A Simple DNS Server With Golang

The following DNS knows how to answer A queries and it only knows IP address of domain.
First we need to get the package:

go get github.com/miekg/dns

Then we have this code:

package main

import (
	"fmt"
	"log"
	"strconv"

	"github.com/miekg/dns"
)

var records = map[string]string{
	"nguyenxuanquang.service": "192.168.1.15",
}

func parseQuery(m *dns.Msg) {
	for _, q := range m.Question {
		switch q.Qtype {
		case dns.TypeA:
			log.Printf("Query for %sn", q.Name)
			ip := records[q.Name]
			if ip != "" {
				rr, err := dns.NewRR(fmt.Sprintf("%s A %s", q.Name, ip))
				if err == nil {
					m.Answer = append(m.Answer, rr)
				}
			}
		}
	}
}
func handleDnsRequest(w dns.ResponseWriter, r *dns.Msg) {
	m := new(dns.Msg)
	m.SetReply(r)
	m.Compress = false
	switch r.Opcode {
	case dns.OpcodeQuery:
		parseQuery(m)
	}

	w.WriteMsg(m)
}

func main() {
	dns.HandleFunc("service.", handleDnsRequest)

	//start server
	port := 8080
	server := &dns.Server{
		Addr: ":" + strconv.Itoa(port), Net: "udp",
	}
	log.Printf("Starting at %dn", port)
	err := server.ListenAndServe()
	defer server.Shutdown()
	if err != nil {
		log.Fatalf("Failed to start server: %sn", err.Error())
	}
}

Use dig(linux) to query the server. If you are the windows user, use this https://help.dyn.com/how-to-use-binds-dig-tool/
Now the result:
image.png
So easy right? Hope you guys feel this topic useful. Thank you for read my topic, have a nice day ❤️.
Ref:
Simple Golang Server: https://gist.github.com/walm/0d67b4fb2d5daf3edd4fad3e13b162cb

Nguồn: viblo.asia

Bài viết liên quan

7 Cách Tăng Tốc Ứng Dụng React Hiệu Quả Mà Bạn Có Thể Làm Ngay

React là một thư viện JavaScript phổ biến trong việc xây dựng giao diện người d

Trung Quốc “thả quân bài tẩy”: hàng loạt robot hình người!

MỘT CUỘC CÁCH MẠNG ROBOT ĐANG HÌNH THÀNH Ở TRUNG QUỐC Thượng Hải, ngày 13/5 –

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con