55 "fmt"
66 "io"
77 "log"
8- "math/rand"
98 "net"
109 "os"
1110 "os/signal"
@@ -19,11 +18,8 @@ import (
1918)
2019
2120func main () {
22- // 初始化随机种子
23- rand .Seed (time .Now ().UnixNano ())
24-
2521 utils .Banner ()
26- fmt .Print ("By:thinkoaa GitHub:https://github.com/thinkoaa/Deadpool\n \n \n " )
22+ fmt .Print (utils . ColorCyan + "By:thinkoaa GitHub:https://github.com/thinkoaa/Deadpool\n " + utils . ColorReset + " \n " )
2723
2824 // 解析命令行参数
2925 configPath := "config.toml"
@@ -49,19 +45,19 @@ func main() {
4945 }
5046
5147 if help {
52- fmt .Println ("Deadpool 代理池工具 使用帮助:" )
53- fmt .Println (" -h, --help 显示此帮助信息" )
54- fmt .Println (" -c, --config <path> 指定配置文件路径 (默认: config.toml)" )
55- fmt .Println (" -l, --lastdata <path> 指定lastdata文件路径 (默认: lastData.txt)" )
56- fmt .Println (" 使用此选项时,不会重新从网络空间获取代理" )
48+ fmt .Println (utils . ColorCyan + "Deadpool 代理池工具 使用帮助:" + utils . ColorReset )
49+ fmt .Println (utils . ColorCyan + " -h, --help 显示此帮助信息" + utils . ColorReset )
50+ fmt .Println (utils . ColorCyan + " -c, --config <path> 指定配置文件路径 (默认: config.toml)" + utils . ColorReset )
51+ fmt .Println (utils . ColorCyan + " -l, --lastdata <path> 指定lastdata文件路径 (默认: lastData.txt)" + utils . ColorReset )
52+ fmt .Println (utils . ColorCyan + " 使用此选项时,不会重新从网络空间获取代理" + utils . ColorReset )
5753 os .Exit (0 )
5854 }
5955
6056 // 读取配置文件
6157 config , err := utils .LoadConfig (configPath )
6258 if err != nil {
63- fmt .Printf ("配置文件 %s 存在错误: %v\n " , configPath , err )
64- fmt .Println ("请检查配置文件格式是否正确,参考 README 中的配置说明" )
59+ fmt .Printf (utils . ColorRed + "配置文件 %s 存在错误: %v\n " + utils . ColorReset , configPath , err )
60+ fmt .Println (utils . ColorRed + "请检查配置文件格式是否正确,参考 README 中的配置说明" + utils . ColorReset )
6561 os .Exit (1 )
6662 }
6763
@@ -78,19 +74,19 @@ func main() {
7874
7975 // 从本地文件中取socks代理
8076 if utils .LogLevel == "debug" {
81- fmt .Print ("***debug模式: 每个请求的代理信息会打印到命令行***\n \n " )
77+ fmt .Print (utils . ColorCyan + "***debug模式: 每个请求的代理信息会打印到命令行***\n " + utils . ColorReset + " \n " )
8278 }
83- fmt .Print ("***直接使用fmt打印当前使用的代理,若高并发时,命令行打印可能会阻塞,不对打印做特殊处理,可忽略,不会影响实际的请求转发 ***\n \n " )
79+ fmt .Print (utils . ColorYellow + "***直接使用fmt打印信息,基本上是打印异常的信息 ***\n " + utils . ColorReset + " \n " )
8480 if lastDataPath == utils .LastDataFile {
8581 // 未指定自定义lastdata路径时,从网络空间获取代理
8682 utils .GetSocks (config )
8783 }
8884
8985 if len (utils .SocksList ) == 0 {
90- fmt .Println ( "未发现代理数据,请调整配置信息,或向" + utils .LastDataFile + "中直接写入IP:PORT格式的socks5代理\n 程序退出" )
86+ fmt .Print ( utils . ColorRed + "未发现代理数据,请调整配置信息,或向" + utils .LastDataFile + "中直接写入IP:PORT格式的socks5代理\n 程序退出" + utils . ColorReset + " \n " )
9187 os .Exit (1 )
9288 }
93- fmt .Printf ("根据IP:PORT去重后,共发现%v个代理\n 检测可用性中......\n " , len (utils .SocksList ))
89+ fmt .Printf (utils . ColorCyan + "根据IP:PORT去重后,共发现%v个代理\n 检测可用性中......\n " + utils . ColorReset , len (utils .SocksList ))
9490
9591 //开始检测代理存活性
9692
@@ -103,27 +99,27 @@ func main() {
10399 if periodicChecking != "" {
104100 cronFlag = true
105101 cron .AddFunc (periodicChecking , func () {
106- fmt .Printf ("\n ===代理存活自检 开始===\n \n " )
102+ fmt .Printf (utils . ColorBlue + "\n ===代理存活自检 开始===\n \n " + utils . ColorReset )
107103 tempList := make ([]string , len (utils .EffectiveList ))
108104 copy (tempList , utils .EffectiveList )
109105 utils .CheckSocks (config .CheckSocks , tempList )
110- fmt .Printf ("\n ===代理存活自检 结束===\n \n " )
106+ fmt .Printf (utils . ColorBlue + "\n ===代理存活自检 结束===\n \n " + utils . ColorReset )
111107 })
112108 }
113109 //根据配置信息,周期性取本地以及hunter、quake、fofa的数据
114110 periodicGetSocks := strings .TrimSpace (config .Task .PeriodicGetSocks )
115111 if periodicGetSocks != "" {
116112 cronFlag = true
117113 cron .AddFunc (periodicGetSocks , func () {
118- fmt .Printf ("\n ===周期性取代理数据 开始===\n \n " )
114+ fmt .Printf (utils . ColorBlue + "\n ===周期性取代理数据 开始===\n \n " + utils . ColorReset )
119115 utils .SocksList = utils .SocksList [:0 ]
120116 utils .GetSocks (config )
121- fmt .Printf ("根据IP:PORT去重后,共发现%v个代理\n 检测可用性中......\n " , len (utils .SocksList ))
117+ fmt .Printf (utils . ColorCyan + "根据IP:PORT去重后,共发现%v个代理\n 检测可用性中......\n " + utils . ColorReset , len (utils .SocksList ))
122118 utils .CheckSocks (config .CheckSocks , utils .SocksList )
123119 if len (utils .EffectiveList ) != 0 {
124120 utils .WriteLinesToFile () //存活代理写入硬盘,以备下次启动直接读取
125121 }
126- fmt .Printf ("\n ===周期性取代理数据 结束===\n \n " )
122+ fmt .Printf (utils . ColorBlue + "\n ===周期性取代理数据 结束===\n \n " + utils . ColorReset )
127123
128124 })
129125 }
@@ -133,7 +129,7 @@ func main() {
133129 }
134130
135131 if len (utils .EffectiveList ) == 0 {
136- fmt .Println ("根据规则检测后,未发现满足要求的代理,请调整配置,程序退出" )
132+ fmt .Println (utils . ColorRed + "根据规则检测后,未发现满足要求的代理,请调整配置,程序退出" + utils . ColorReset )
137133 os .Exit (1 )
138134 }
139135
@@ -154,13 +150,13 @@ func main() {
154150 }
155151 server , _ := socks5 .New (conf )
156152 listenerAddr := config .Listener .IP + ":" + strconv .Itoa (config .Listener .Port )
157- fmt .Printf ("======其他工具通过配置 socks5://%v 使用收集的代理,如有账号密码,记得配置======\n " , listenerAddr )
158- fmt .Println ("按回车键随机切换到下一个代理IP,输入 s 回车查看统计..." )
153+ fmt .Printf (utils . ColorGreen + "======其他工具通过配置 socks5://%v 使用收集的代理,如有账号密码,记得配置======\n " + utils . ColorReset , listenerAddr )
154+ fmt .Println (utils . ColorYellow + "按回车键随机切换到下一个代理IP,输入 s 回车查看统计..." + utils . ColorReset )
159155
160156 // 手动创建 listener,支持优雅关闭
161157 l , err := net .Listen ("tcp" , listenerAddr )
162158 if err != nil {
163- fmt .Printf ("本地监听服务启动失败:%v\n " , err )
159+ fmt .Printf (utils . ColorRed + "本地监听服务启动失败:%v\n " + utils . ColorReset , err )
164160 os .Exit (1 )
165161 }
166162
@@ -169,7 +165,8 @@ func main() {
169165 sigChan := make (chan os.Signal , 1 )
170166 signal .Notify (sigChan , syscall .SIGINT , syscall .SIGTERM )
171167 <- sigChan
172- fmt .Println ("\n \n [优雅关闭] 收到关闭信号,准备退出..." )
168+ fmt .Println (utils .ColorCyan + "\n \n [优雅关闭] 收到关闭信号,准备退出..." + utils .ColorReset )
169+ fmt .Println (utils .ColorYellow + "[提示] 再次按 Ctrl+C 可强制退出" + utils .ColorReset )
173170 // 关闭 ShutdownChan,通知拒绝新连接
174171 select {
175172 case <- utils .ShutdownChan :
@@ -185,16 +182,20 @@ func main() {
185182 timeout := time .After (30 * time .Second )
186183 for {
187184 select {
185+ case <- sigChan :
186+ // 再次收到关闭信号,强制退出
187+ fmt .Println (utils .ColorRed + "\n [优雅关闭] 收到强制退出信号,立即退出!" + utils .ColorReset )
188+ os .Exit (0 )
188189 case <- timeout :
189- fmt .Println ("[优雅关闭] 等待超时,强制退出" )
190+ fmt .Println (utils . ColorYellow + "[优雅关闭] 等待超时,强制退出" + utils . ColorReset )
190191 os .Exit (0 )
191192 default :
192193 active := utils .GetActiveConns ()
193194 if active == 0 {
194- fmt .Println ("[优雅关闭] 所有连接已完成,退出。" )
195+ fmt .Println (utils . ColorGreen + "[优雅关闭] 所有连接已完成,退出。" + utils . ColorReset )
195196 os .Exit (0 )
196197 }
197- fmt .Printf ("[优雅关闭] 等待 %d 个活跃连接完成...\n " , active )
198+ fmt .Printf (utils . ColorCyan + "[优雅关闭] 等待 %d 个活跃连接完成...\n " + utils . ColorReset , active )
198199 time .Sleep (1 * time .Second )
199200 }
200201 }
@@ -208,17 +209,17 @@ func main() {
208209 input = strings .TrimSpace (input )
209210 if input == "s" || input == "S" {
210211 utils .PrintStats ()
211- fmt .Println ("按回车键随机切换到下一个代理IP,输入 s 回车查看统计..." )
212+ fmt .Println (utils . ColorYellow + "按回车键随机切换到下一个代理IP,输入 s 回车查看统计..." + utils . ColorReset )
212213 continue
213214 }
214215 utils .SetNextProxyIndex ()
215216 currentIndex := utils .GetCurrentProxyIndex ()
216217 if currentIndex >= 0 && len (utils .EffectiveList ) > 0 {
217- fmt .Printf ("已随机切换到代理IP: %s (剩余可用: %d)\n " , utils .EffectiveList [currentIndex ], len (utils .EffectiveList ))
218+ fmt .Printf (utils . ColorGreen + "已随机切换到代理IP: %s (剩余可用: %d)\n " + utils . ColorReset , utils .EffectiveList [currentIndex ], len (utils .EffectiveList ))
218219 } else {
219- fmt .Println ("没有可用的代理IP" )
220+ fmt .Println (utils . ColorRed + "没有可用的代理IP" + utils . ColorReset )
220221 }
221- fmt .Println ("按回车键随机切换到下一个代理IP,输入 s 回车查看统计..." )
222+ fmt .Println (utils . ColorYellow + "按回车键随机切换到下一个代理IP,输入 s 回车查看统计..." + utils . ColorReset )
222223 }
223224 }()
224225
@@ -231,7 +232,7 @@ func main() {
231232 // 主 goroutine 阻塞等待(信号处理 goroutine 会调用 os.Exit)
232233 select {}
233234 default :
234- fmt .Printf ("SOCKS5 服务异常: %v\n " , err )
235+ fmt .Printf (utils . ColorRed + "SOCKS5 服务异常: %v\n " + utils . ColorReset , err )
235236 os .Exit (1 )
236237 }
237238 }
0 commit comments