diff --git a/README.md b/README.md index 1dd883c..27e7177 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ 克隆项目仓库: ```bash -git clone https://git.aixiao.me/DenyIP-go.git +git clone https://git.aixiao.me/aixiao/DenyIP-go.git cd DenyIP-go ``` diff --git a/denyip b/denyip index 7c2fe03..7dae176 100644 Binary files a/denyip and b/denyip differ diff --git a/main.go b/main.go index 1108f40..562fb15 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "os" "os/exec" "os/signal" + "runtime" "strings" "sync" "syscall" @@ -16,20 +17,20 @@ import ( ) var ( - Daemon = flag.Bool("d", false, "守护进程模式") + daemon = flag.Bool("d", false, "守护进程模式") child = flag.Bool("child", false, "子进程模式") ) // 全局变量 var ( - interfacesList bool // 是否列出网络接口 + InterfacesList bool // 是否列出网络接口 InterfaceName *string // 网络接口名称 PcapFile *string // 输出文件名 Protocol *string // BPF 过滤器 - SIG int // 当前使用的 ipset 集合编号 - MAX_SIG = 10 // 最大 ipset 集合数量 - SIG_NAME string // 当前使用的 ipset 集合名称 + IPSET_NUMBER int // 当前使用的 ipset 集合编号 + MAX_IPSET_NAME = 10 // 最大 ipset 集合数量 + IPSET_NAME string // 当前使用的 ipset 集合名称 IpList = list.New() // 存储 IPv4 地址的链表 IpMutex sync.Mutex // 保护 ipList 的互斥锁 @@ -160,10 +161,10 @@ func runMainProcess() { // 主进程逻辑 log.Fatalf("子进程启动失败: %v", err) } - SIG = 0 - SIG_NAME = fmt.Sprintf("root%d", SIG) - if return_value := IsIpset(SIG_NAME); return_value == 1 { - createIPSet(SIG_NAME) + IPSET_NUMBER = 0 + IPSET_NAME = fmt.Sprintf("root%d", IPSET_NUMBER) + if return_value := IsIpset(IPSET_NAME); return_value == 1 { + createIPSet(IPSET_NAME) } // 启动抓包 @@ -178,8 +179,8 @@ func runMainProcess() { // 主进程逻辑 region, _ := ip2region(e1.Value.(net.IP).String()) - log.Printf("当前 Ipset 链 %s %d\n", SIG_NAME, func() int { - _len, _err := NumIPSet(SIG_NAME) + log.Printf("当前 Ipset 链 %s %d\n", IPSET_NAME, func() int { + _len, _err := NumIPSet(IPSET_NAME) if _err == nil { return _len } @@ -191,7 +192,7 @@ func runMainProcess() { // 主进程逻辑 log.Printf("获取Ip地域出错: %v", err) } else { log.Printf("curl_ %s 位置 %s\n", e1.Value.(net.IP).String(), position) // 打印地域 - AddIPSet(SIG_NAME, e1.Value.(net.IP).String()) // 添加 Ip 到 ipset 集合 + AddIPSet(IPSET_NAME, e1.Value.(net.IP).String()) // 添加 Ip 到 ipset 集合 IpList.Remove(e1) // 移除第一个元素 } @@ -211,21 +212,21 @@ func runMainProcess() { // 主进程逻辑 // 启动防火墙管理 go func() { for { - if ipset_len, _ := NumIPSet(SIG_NAME); ipset_len >= 65534 { - //log.Printf("ipset %s 列表已满 %dd\n", SIG_NAME, ipset_len) - log.Printf("\033[31m ipset %s 列表已满 %d \033[0m\n", SIG_NAME, ipset_len) + if ipset_len, _ := NumIPSet(IPSET_NAME); ipset_len >= 65534 { + //log.Printf("ipset %s 列表已满 %dd\n", IPSET_NAME, ipset_len) + log.Printf("\033[31m ipset %s 列表已满 %d \033[0m\n", IPSET_NAME, ipset_len) // 创建新的 ipset 集合 - SIG++ + IPSET_NUMBER++ - if SIG >= MAX_SIG { - //log.Printf("已创建 %d 个集合!!!", MAX_SIG) - log.Printf("\033[31m 已创建 %d 个集合!!! \033[0m\n", MAX_SIG) + if IPSET_NUMBER >= MAX_IPSET_NAME { + //log.Printf("已创建 %d 个集合!!!", MAX_IPSET_NAME) + log.Printf("\033[31m 已创建 %d 个集合!!! \033[0m\n", MAX_IPSET_NAME) } - SIG_NAME = fmt.Sprintf("root%d", SIG) - if return_value := IsIpset(SIG_NAME); return_value == 1 { - createIPSet(SIG_NAME) + IPSET_NAME = fmt.Sprintf("root%d", IPSET_NUMBER) + if return_value := IsIpset(IPSET_NAME); return_value == 1 { + createIPSet(IPSET_NAME) } } @@ -243,12 +244,13 @@ func handleCmd() { var instruction string var help bool InterfaceName = flag.String("i", "", "指定要使用的网络接口") - flag.BoolVar(&interfacesList, "l", false, "列出可用的网络接口") + flag.BoolVar(&InterfacesList, "l", false, "列出可用的网络接口") Protocol = flag.String("f", "tcp", "指定 BPF 过滤器") PcapFile = flag.String("o", "", "保存捕获数据的输出文件(可选)") flag.StringVar(&instruction, "s", "", "-s start 启动 Iptables 规则\n-s stop 停止 Iptables 规则") flag.BoolVar(&help, "h", false, "") flag.BoolVar(&help, "help", false, "帮助信息") + flag.Parse() if help { @@ -266,7 +268,7 @@ func handleCmd() { switch instruction { case "start": fmt.Println("启动 Iptables 规则") - for i := 0; i < MAX_SIG; i++ { + for i := 0; i < MAX_IPSET_NAME; i++ { _name := fmt.Sprintf("root%d", i) iptables_add(_name) } @@ -274,7 +276,7 @@ func handleCmd() { os.Exit(0) case "stop": fmt.Println("停止 Iptables 规则") - for i := 0; i < MAX_SIG; i++ { + for i := 0; i < MAX_IPSET_NAME; i++ { _name := fmt.Sprintf("root%d", i) iptables_del(_name) } @@ -284,7 +286,7 @@ func handleCmd() { } } - if interfacesList { + if InterfacesList { printAvailableInterfaces() os.Exit(0) } @@ -295,10 +297,11 @@ func handleCmd() { } func main() { + runtime.GOMAXPROCS(runtime.NumCPU()) // 设置最大CPU核数 handleCmd() // 守护进程模式 - if *Daemon { + if *daemon { startDaemon() }