新建DNS服务器
This commit is contained in:
74
main.go
Normal file
74
main.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"dns-server/config"
|
||||
"dns-server/dns"
|
||||
"dns-server/http"
|
||||
"dns-server/logger"
|
||||
"dns-server/shield"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 解析命令行参数
|
||||
configPath := flag.String("config", "config.json", "配置文件路径")
|
||||
flag.Parse()
|
||||
|
||||
// 初始化配置
|
||||
cfg, err := config.LoadConfig(*configPath)
|
||||
if err != nil {
|
||||
log.Fatalf("加载配置失败: %v", err)
|
||||
}
|
||||
|
||||
// 初始化日志系统
|
||||
if err := logger.InitLogger(cfg.Log.File, cfg.Log.Level, 0, 0, 0); err != nil {
|
||||
log.Fatalf("初始化日志系统失败: %v", err)
|
||||
}
|
||||
defer logger.Close()
|
||||
|
||||
// 初始化屏蔽管理系统
|
||||
shieldManager := shield.NewShieldManager(&cfg.Shield)
|
||||
if err := shieldManager.LoadRules(); err != nil {
|
||||
logger.Error("加载屏蔽规则失败", "error", err)
|
||||
}
|
||||
|
||||
// 启动DNS服务器
|
||||
dnsServer := dns.NewServer(&cfg.DNS, &cfg.Shield, shieldManager)
|
||||
go func() {
|
||||
if err := dnsServer.Start(); err != nil {
|
||||
logger.Error("DNS服务器启动失败", "error", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}()
|
||||
|
||||
// 启动HTTP控制台服务器
|
||||
httpServer := http.NewServer(cfg, dnsServer, shieldManager)
|
||||
go func() {
|
||||
if err := httpServer.Start(); err != nil {
|
||||
logger.Error("HTTP控制台服务器启动失败", "error", err)
|
||||
}
|
||||
}()
|
||||
|
||||
// 启动定时更新任务
|
||||
go shieldManager.StartAutoUpdate()
|
||||
|
||||
logger.Info(fmt.Sprintf("DNS服务器已启动,监听端口: %d", cfg.DNS.Port))
|
||||
logger.Info(fmt.Sprintf("HTTP控制台已启动,监听端口: %d", cfg.HTTP.Port))
|
||||
|
||||
// 等待退出信号
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-sigChan
|
||||
|
||||
logger.Info("正在关闭服务...")
|
||||
dnsServer.Stop()
|
||||
httpServer.Stop()
|
||||
shieldManager.StopAutoUpdate()
|
||||
logger.Info("所有服务已关闭")
|
||||
}
|
||||
Reference in New Issue
Block a user