修改文档
This commit is contained in:
parent
46f3d1f264
commit
e1f29e64bd
@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
57
main.go
57
main.go
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user