优化核心逻辑

This commit is contained in:
aixiao 2025-01-08 16:01:08 +08:00
parent b51d64644f
commit 18ab5ae4ef
4 changed files with 14 additions and 12 deletions

View File

@ -10,6 +10,9 @@
克隆项目仓库: 克隆项目仓库:
```bash ```bash
apt-get install ipset
apt-get install libpcap-dev
git clone https://git.aixiao.me/aixiao/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.

View File

@ -81,7 +81,7 @@ func Is_Name_Ipset(setName string) int {
} }
func Is_Ip_Ipset(ip string) int { func Is_Ip_Ipset(ip string) int {
cmd := exec.Command("sh", "-c", fmt.Sprintf("ipset list | grep \"%s\" | cut -d ':' -f 2 | sed 's/ //g'", ip)) cmd := exec.Command("sh", "-c", fmt.Sprintf("ipset list | grep \"%s\"", ip))
err := cmd.Run() err := cmd.Run()
if err != nil { if err != nil {

21
main.go
View File

@ -175,14 +175,6 @@ func runMainProcess() { // 主进程逻辑
e1 := IpList.Front() // 获取链表第一个元素 e1 := IpList.Front() // 获取链表第一个元素
region, _ := ip2region(e1.Value.(net.IP).String()) // 离线Ip位置库初步判断地域 region, _ := ip2region(e1.Value.(net.IP).String()) // 离线Ip位置库初步判断地域
log.Printf("当前 Ipset 链 %s %d\n", IPSET_NAME, func() int { // 打印 当前 Ipset 链长度
_len, _err := NumIPSet(IPSET_NAME)
if _err == nil {
return _len
}
return 0
}())
if Is_Ip_Ipset(e1.Value.(net.IP).String()) != 0 { // Ip不在 Ipset 集合中 if Is_Ip_Ipset(e1.Value.(net.IP).String()) != 0 { // Ip不在 Ipset 集合中
if !strings.Contains(region, "中国") && !strings.Contains(region, "内网") { // 离线库判断不在中国内尝试API判断 if !strings.Contains(region, "中国") && !strings.Contains(region, "内网") { // 离线库判断不在中国内尝试API判断
if position, err := curl_(e1.Value.(net.IP).String()); err != nil { //API判断地域 if position, err := curl_(e1.Value.(net.IP).String()); err != nil { //API判断地域
@ -198,12 +190,19 @@ func runMainProcess() { // 主进程逻辑
IpList.Remove(e1) IpList.Remove(e1)
} }
} else { // 在 Ipset 集合中 } else { // 在 Ipset 集合中
log.Printf("\033[31m%s 已经在 Ipset 集合中\033[0m\n", e1.Value.(net.IP).String()) log.Printf("\033[31m %s 在 Ipset 集合中 \033[0m\n", e1.Value.(net.IP).String())
IpList.Remove(e1) IpList.Remove(e1)
} }
log.Printf("Ip 链表长度:%d\n", IpList.Len()) // 链表长度 log.Printf(" 当前Ip链表长度:%d, Ipset名:%s, 长:%d\n", IpList.Len(), IPSET_NAME, func() int { // 打印 当前 Ipset 链长度
time.Sleep(2 * time.Second) _len, _err := NumIPSet(IPSET_NAME)
if _err == nil {
return _len
}
return 0
}())
time.Sleep(1 * time.Second)
} }
IpMutex.Unlock() // 链表解锁互斥锁 IpMutex.Unlock() // 链表解锁互斥锁