优化日志打印格式
This commit is contained in:
2
cap.go
2
cap.go
@@ -93,7 +93,7 @@ func startPacketCapture() {
|
|||||||
|
|
||||||
// 创建数据包源,用于从网络接口读取数据包
|
// 创建数据包源,用于从网络接口读取数据包
|
||||||
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
|
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
|
||||||
fmt.Printf("正在监听网络接口 %s, 使用过滤器 '%s'...\n", *InterfaceName, *Protocol)
|
log.Printf(" 正在监听网络接口 %s, 使用过滤器 '%s'...\n", *InterfaceName, *Protocol)
|
||||||
|
|
||||||
// 创建信号通道,用于捕获中断信号
|
// 创建信号通道,用于捕获中断信号
|
||||||
sigChan := make(chan os.Signal, 1)
|
sigChan := make(chan os.Signal, 1)
|
||||||
|
|||||||
15
embed.go
15
embed.go
@@ -4,6 +4,7 @@ import (
|
|||||||
"embed"
|
"embed"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
)
|
)
|
||||||
@@ -31,7 +32,7 @@ func releaseEmbeddedDir(efs embed.FS, embedPath string, targetDir string) error
|
|||||||
|
|
||||||
// 如果文件已存在就跳过(可选)
|
// 如果文件已存在就跳过(可选)
|
||||||
if _, err := os.Stat(targetPath); err == nil {
|
if _, err := os.Stat(targetPath); err == nil {
|
||||||
fmt.Printf("文件已存在: %s,跳过写入\n", targetPath)
|
log.Printf(" 文件已存在: %s, 跳过写入\n", targetPath)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,27 +41,27 @@ func releaseEmbeddedDir(efs embed.FS, embedPath string, targetDir string) error
|
|||||||
return fmt.Errorf("写入文件失败: %w", err)
|
return fmt.Errorf("写入文件失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("释放: %s → %s\n", path, targetPath)
|
log.Printf(" 释放: %s → %s\n", path, targetPath)
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func embed_ip2region() {
|
func embed_ip2region() {
|
||||||
fmt.Println("正在释放 ip2region 数据...")
|
log.Println(" 正在释放 ip2region 数据...")
|
||||||
|
|
||||||
err := releaseEmbeddedDir(embeddedFS, "ip2region", "ip2region")
|
err := releaseEmbeddedDir(embeddedFS, "ip2region", "ip2region")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("释放失败:", err)
|
log.Println(" 释放失败:", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("释放完成,程序继续执行...")
|
log.Println(" 释放完成,程序继续执行...")
|
||||||
|
|
||||||
// 你可以在这里使用 ip2region.xdb 文件了,例如:
|
// 你可以在这里使用 ip2region.xdb 文件了,例如:
|
||||||
if _, err := os.Stat("ip2region/ip2region.xdb"); err == nil {
|
if _, err := os.Stat("ip2region/ip2region.xdb"); err == nil {
|
||||||
fmt.Println("✅ 确认 ip2region.xdb 已成功写出")
|
log.Println(" ✅ 确认 ip2region.xdb 已成功写出")
|
||||||
// 这里可以调用 ip2region 逻辑加载它
|
// 这里可以调用 ip2region 逻辑加载它
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("❌ 找不到 ip2region.xdb")
|
log.Println(" ❌ 找不到 ip2region.xdb")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -29,6 +30,6 @@ func GetLocalIpv4Addr() string {
|
|||||||
return "NULL"
|
return "NULL"
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("公网IP: %s\n", ipStr)
|
log.Printf(" 公网IP: %s\n", ipStr)
|
||||||
return ipStr
|
return ipStr
|
||||||
}
|
}
|
||||||
|
|||||||
27
main.go
27
main.go
@@ -67,7 +67,7 @@ func StartChildProcess() (*exec.Cmd, error) {
|
|||||||
if err := cmd.Start(); err != nil {
|
if err := cmd.Start(); err != nil {
|
||||||
return nil, fmt.Errorf("启动子进程失败: %w", err)
|
return nil, fmt.Errorf("启动子进程失败: %w", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("子进程已启动, PID: %d\n", cmd.Process.Pid)
|
log.Printf(" 子进程已启动, PID: %d\n", cmd.Process.Pid)
|
||||||
return cmd, nil
|
return cmd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,7 +224,7 @@ func loadFromFile(filePath string, logMessage string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func InitMap() {
|
func InitMap() {
|
||||||
if err := loadFromFile("cn.json", " Map 已成功从文件加载"); err != nil {
|
if err := loadFromFile("cn.json", " Map 已成功从文件加载"); err != nil {
|
||||||
log.Fatalf(" 加载 Map 失败: %v", err)
|
log.Fatalf(" 加载 Map 失败: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,7 +257,7 @@ func WriteLocalAddr() {
|
|||||||
|
|
||||||
func RunMainProcess() { // 主进程逻辑
|
func RunMainProcess() { // 主进程逻辑
|
||||||
|
|
||||||
fmt.Println("主进程启动...")
|
log.Println(" 主进程启动...")
|
||||||
|
|
||||||
WriteLocalAddr() // 将本机外网地址加入到已处理集合中
|
WriteLocalAddr() // 将本机外网地址加入到已处理集合中
|
||||||
|
|
||||||
@@ -302,11 +302,11 @@ func RunMainProcess() { // 主进程逻辑
|
|||||||
|
|
||||||
setName, err := RemoveIPIfInSets("root", MAX_IPSET_NAME, ipStr)
|
setName, err := RemoveIPIfInSets("root", MAX_IPSET_NAME, ipStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf(" %s 删除 IP 出错: %v\n", ipStr, err)
|
log.Printf(" %s 删除 IP 出错: %v\n", ipStr, err)
|
||||||
} else if setName != "" {
|
} else if setName != "" {
|
||||||
log.Printf(" %s 已从 %s 中移除 \n", ipStr, setName)
|
log.Printf(" %s 已从 %s 中移除 \n", ipStr, setName)
|
||||||
} else {
|
} else {
|
||||||
log.Printf(" %s 不在任何 IPSet 中,无需移除\n", ipStr)
|
log.Printf(" %s 不在任何 IPSet 中,无需移除\n", ipStr)
|
||||||
}
|
}
|
||||||
|
|
||||||
goto next
|
goto next
|
||||||
@@ -316,7 +316,7 @@ func RunMainProcess() { // 主进程逻辑
|
|||||||
|
|
||||||
if Is_Ip_Ipset(ipStr) != 0 { // IP 不在 ipset 集合中
|
if Is_Ip_Ipset(ipStr) != 0 { // IP 不在 ipset 集合中
|
||||||
|
|
||||||
//if !strings.Contains(region, "中国") && !strings.Contains(region, "内网") { // 离线库判断不在中国内
|
//if !strings.Contains(region, "中国") && !strings.Contains(region, "内网") { // 离线库判断不在中国内
|
||||||
if !ContainsPart(region, REGION) {
|
if !ContainsPart(region, REGION) {
|
||||||
log.Printf("\033[33m [%s %s] 离线库为国外, 进一步API判断\033[0m\n", ipStr, region)
|
log.Printf("\033[33m [%s %s] 离线库为国外, 进一步API判断\033[0m\n", ipStr, region)
|
||||||
|
|
||||||
@@ -325,13 +325,12 @@ func RunMainProcess() { // 主进程逻辑
|
|||||||
} else {
|
} else {
|
||||||
log.Printf("\033[31m [%s %s]\033[0m\n\n", ipStr, position) // 打印地域
|
log.Printf("\033[31m [%s %s]\033[0m\n\n", ipStr, position) // 打印地域
|
||||||
|
|
||||||
//if !strings.Contains(position, "中国") && !strings.Contains(position, "内网") { // API 判断为国外
|
//if !strings.Contains(position, "中国") && !strings.Contains(position, "内网") { // API 判断为国外
|
||||||
if !ContainsPart(region, REGION) {
|
if !ContainsPart(region, REGION) {
|
||||||
AddIPSet(IPSET_NAME, ipStr) // 添加 IP 到 ipset 集合
|
AddIPSet(IPSET_NAME, ipStr) // 添加 IP 到 ipset 集合
|
||||||
|
|
||||||
// 钉钉告警,废弃!钉钉可能限制文本长度,和发送次数!
|
// 钉钉告警,废弃!钉钉可能限制文本长度,和发送次数!
|
||||||
// warning_ding(ipStr, position) // 警告 IP 地域
|
// warning_ding(ipStr, position) // 警告 IP 地域
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
log.Printf("\033[33m %s 离线库为国外, API 判断为国内, 标记为已处理\033[0m\n", ipStr)
|
log.Printf("\033[33m %s 离线库为国外, API 判断为国内, 标记为已处理\033[0m\n", ipStr)
|
||||||
|
|
||||||
@@ -342,7 +341,7 @@ func RunMainProcess() { // 主进程逻辑
|
|||||||
|
|
||||||
// 写入json文件
|
// 写入json文件
|
||||||
if err := saveMapToFile("cn.json"); err != nil {
|
if err := saveMapToFile("cn.json"); err != nil {
|
||||||
log.Printf("实时保存 Map 失败: %v", err)
|
log.Printf(" 实时保存 Map 失败: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -399,7 +398,7 @@ func RunMainProcess() { // 主进程逻辑
|
|||||||
ProcessedMutex.Unlock()
|
ProcessedMutex.Unlock()
|
||||||
|
|
||||||
// 打印日志,表示本次清理已完成
|
// 打印日志,表示本次清理已完成
|
||||||
log.Println(" 已清理过期 ProcessedIPMap 项")
|
log.Println(" 已清理过期 ProcessedIPMap 项")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@@ -408,7 +407,7 @@ func RunMainProcess() { // 主进程逻辑
|
|||||||
for {
|
for {
|
||||||
time.Sleep(1 * time.Minute) // 每 10 分钟自动刷新
|
time.Sleep(1 * time.Minute) // 每 10 分钟自动刷新
|
||||||
if err := LoadWhiteList("whitelist.txt"); err != nil {
|
if err := LoadWhiteList("whitelist.txt"); err != nil {
|
||||||
log.Printf(" 刷新白名单失败: %v", err)
|
log.Printf(" 刷新白名单失败: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -511,9 +510,9 @@ func main() {
|
|||||||
// 加载白名单
|
// 加载白名单
|
||||||
err := LoadWhiteList("whitelist.txt")
|
err := LoadWhiteList("whitelist.txt")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf(" whiteList Map 加载白名单失败: %v", err)
|
log.Fatalf(" whiteList Map 加载白名单失败: %v", err)
|
||||||
} else {
|
} else {
|
||||||
log.Println(" whiteList Map 白名单加载成功")
|
log.Println(" whiteList Map 白名单加载成功")
|
||||||
}
|
}
|
||||||
|
|
||||||
// 守护进程模式
|
// 守护进程模式
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ var (
|
|||||||
func LoadWhiteList(filename string) error {
|
func LoadWhiteList(filename string) error {
|
||||||
// 如果文件不存在,直接返回 nil 表示无需加载
|
// 如果文件不存在,直接返回 nil 表示无需加载
|
||||||
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
if _, err := os.Stat(filename); os.IsNotExist(err) {
|
||||||
log.Printf(" 白名单文件 %s 不存在,跳过加载。", filename)
|
log.Printf(" 白名单文件 %s 不存在,跳过加载。", filename)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,6 +45,6 @@ func LoadWhiteList(filename string) error {
|
|||||||
whiteList = tempList
|
whiteList = tempList
|
||||||
whiteListLock.Unlock()
|
whiteListLock.Unlock()
|
||||||
|
|
||||||
log.Println("白名单已加载完成")
|
log.Println(" 白名单已加载完成")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user