修改文档

This commit is contained in:
aixiao 2025-01-06 17:13:16 +08:00
parent 46f3d1f264
commit e1f29e64bd
3 changed files with 31 additions and 28 deletions

View File

@ -9,7 +9,7 @@
克隆项目仓库: 克隆项目仓库:
```bash ```bash
git clone https://git.aixiao.me/DenyIP-go.git git clone https://git.aixiao.me/aixiao/DenyIP-go.git
cd DenyIP-go cd DenyIP-go
``` ```

BIN
denyip

Binary file not shown.

57
main.go
View File

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