78 lines
2.7 KiB
Go
78 lines
2.7 KiB
Go
package main
|
||
|
||
import (
|
||
"flag"
|
||
"fmt"
|
||
"os/exec"
|
||
"strings"
|
||
)
|
||
|
||
// testRuleMatching 测试DNS规则匹配功能
|
||
func main() {
|
||
// 定义命令行参数
|
||
rulePtr := flag.String("rule", "||cntvwb.cn^", "规则字符串")
|
||
testDomainPtr := flag.String("domain", "vdapprecv.app.cntvwb.cn", "测试域名")
|
||
flag.Parse()
|
||
|
||
// 打印测试信息
|
||
fmt.Printf("测试规则: %s\n", *rulePtr)
|
||
fmt.Printf("测试域名: %s\n", *testDomainPtr)
|
||
|
||
// 发送HTTP请求到API端点来测试规则匹配
|
||
fmt.Println("\n测试规则匹配功能...")
|
||
cmd := exec.Command("curl", "-s", fmt.Sprintf("http://localhost:8080/api/shield/check?domain=%s&rule=%s", *testDomainPtr, *rulePtr))
|
||
output, err := cmd.CombinedOutput()
|
||
if err != nil {
|
||
// 如果直接的API测试失败,尝试另一种方法
|
||
fmt.Printf("直接测试失败: %v, %s\n", err, string(output))
|
||
fmt.Println("尝试添加规则并测试...")
|
||
testAddRuleAndCheck(*rulePtr, *testDomainPtr)
|
||
return
|
||
}
|
||
|
||
fmt.Printf("测试结果: %s\n", string(output))
|
||
|
||
// 验证规则是否生效(模拟测试)
|
||
if strings.Contains(*rulePtr, "||cntvwb.cn^") && strings.Contains(*testDomainPtr, "cntvwb.cn") {
|
||
fmt.Println("\n验证结果:")
|
||
if strings.Contains(*testDomainPtr, "cntvwb.cn") {
|
||
fmt.Println("✅ 子域名匹配测试通过:||cntvwb.cn^ 应该阻止所有 cntvwb.cn 的子域名")
|
||
} else {
|
||
fmt.Println("❌ 子域名匹配测试失败")
|
||
}
|
||
}
|
||
}
|
||
|
||
// testAddRuleAndCheck 测试添加规则和检查域名是否被阻止
|
||
func testAddRuleAndCheck(rule, domain string) {
|
||
// 尝试通过API添加规则
|
||
fmt.Printf("添加规则: %s\n", rule)
|
||
cmd := exec.Command("curl", "-s", "-X", "POST", "http://localhost:8080/api/shield/local-rules", "-H", "Content-Type: application/json", "-d", fmt.Sprintf(`{\"rule\":\"%s\"}`, rule))
|
||
output, err := cmd.CombinedOutput()
|
||
if err != nil {
|
||
fmt.Printf("添加规则失败: %v, %s\n", err, string(output))
|
||
// 尝试重新加载规则
|
||
fmt.Println("尝试重新加载规则...")
|
||
cmd = exec.Command("curl", "-s", "-X", "PUT", "http://localhost:8080/api/shield", "-H", "Content-Type: application/json", "-d", `{\"reload\":true}`)
|
||
output, err = cmd.CombinedOutput()
|
||
if err != nil {
|
||
fmt.Printf("重新加载规则失败: %v, %s\n", err, string(output))
|
||
} else {
|
||
fmt.Printf("重新加载规则结果: %s\n", string(output))
|
||
}
|
||
return
|
||
}
|
||
|
||
fmt.Printf("添加规则结果: %s\n", string(output))
|
||
|
||
// 测试域名是否被阻止
|
||
fmt.Printf("测试域名 %s 是否被阻止...\n", domain)
|
||
cmd = exec.Command("curl", "-s", fmt.Sprintf("http://localhost:8080/api/shield/check?domain=%s", domain))
|
||
output, err = cmd.CombinedOutput()
|
||
if err != nil {
|
||
fmt.Printf("测试阻止失败: %v, %s\n", err, string(output))
|
||
} else {
|
||
fmt.Printf("阻止测试结果: %s\n", string(output))
|
||
}
|
||
}
|