mirror of
				https://github.com/dcarrillo/whatismyip.git
				synced 2025-11-04 05:49:09 +00:00 
			
		
		
		
	New whatismydns feature (#29)
This commit is contained in:
		
							
								
								
									
										48
									
								
								server/dns.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								server/dns.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
package server
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"log"
 | 
			
		||||
	"strconv"
 | 
			
		||||
 | 
			
		||||
	"github.com/miekg/dns"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const port = 53
 | 
			
		||||
 | 
			
		||||
type DNS struct {
 | 
			
		||||
	server  *dns.Server
 | 
			
		||||
	handler *dns.Handler
 | 
			
		||||
	ctx     context.Context
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewDNSServer(ctx context.Context, handler dns.Handler) *DNS {
 | 
			
		||||
	return &DNS{
 | 
			
		||||
		handler: &handler,
 | 
			
		||||
		ctx:     ctx,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *DNS) Start() {
 | 
			
		||||
	d.server = &dns.Server{
 | 
			
		||||
		Addr:    ":" + strconv.Itoa(port),
 | 
			
		||||
		Net:     "udp",
 | 
			
		||||
		Handler: *d.handler,
 | 
			
		||||
		// UDPSize:   65535,
 | 
			
		||||
		// ReusePort: true,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Printf("Starting DNS server listening on :%d (udp)", port)
 | 
			
		||||
	go func() {
 | 
			
		||||
		if err := d.server.ListenAndServe(); err != nil {
 | 
			
		||||
			log.Fatal(err)
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *DNS) Stop() {
 | 
			
		||||
	log.Printf("Stopping DNS server...")
 | 
			
		||||
	if err := d.server.Shutdown(); err != nil {
 | 
			
		||||
		log.Printf("DNS server forced to shutdown: %s", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user