diff options
| author | Handingkang <[email protected]> | 2023-07-10 19:58:59 +0800 |
|---|---|---|
| committer | Handingkang <[email protected]> | 2023-07-10 19:58:59 +0800 |
| commit | 3d30b4ba2bba20cb85afb8e1ebd670554fd6bb9b (patch) | |
| tree | c51c57d605bfcf32d04b871c8cccc0f3066a157f | |
| parent | 886926e5d1156ee168b4727dee2de113b9e4ebbb (diff) | |
1. 文档撰写
2. 代码细节修改
| -rw-r--r-- | .dockerignore | 3 | ||||
| -rw-r--r-- | Ohmydns2.md | 74 | ||||
| -rw-r--r-- | core/README.md | 1 | ||||
| -rw-r--r-- | core/dnsserver/prober_http.go | 3 | ||||
| -rw-r--r-- | picture/image.png | bin | 0 -> 67452 bytes | |||
| -rw-r--r-- | plugin/pkg/prober/args.go | 1 | ||||
| -rw-r--r-- | plugin/v64dns/setup.go | 8 | ||||
| -rw-r--r-- | plugin/v64dns/v64dns_policy.go | 5 | ||||
| -rw-r--r-- | plugin/v64dns/v64dnsutil.go | 7 |
9 files changed, 91 insertions, 11 deletions
diff --git a/.dockerignore b/.dockerignore index 8d9abe9..303d104 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,4 @@ *.md data -plugin/v64dns/analyze/venv
\ No newline at end of file +plugin/v64dns/analyze/venv +picture
\ No newline at end of file diff --git a/Ohmydns2.md b/Ohmydns2.md new file mode 100644 index 0000000..f5f9cb7 --- /dev/null +++ b/Ohmydns2.md @@ -0,0 +1,74 @@ +# Ohmydns2 +## 功能 +基于coredns改进而来的DNS服务组件, + +## 项目架构 + +### 核心插件 +存放在/plugin/pkg中,负责所有底层DNS请求、响应的实现(类似于sapp解析层插件) + +### 业务插件 +存放在plugin,负责各种业务层处理实现(类似于sapp业务层插件) +## 部署方式 +项目打包为Docker镜像进行容器化部署 +## 配置项 +### Ohmyfile +参照coredns的corefile +#### v64DNS + +##### NS4 +##### NS6 + +## API设计 +### 探测控制 +通过HTTP访问的方式控制探测部分,默认开放端口2115,访问路径`/prober` +#### 参数 + +| 参数名 | 说明 | 示例 | +|--------|--------------------|----------------------------------| +| / | 无参数时,默认展示所有的探测任务状态 | / | +| act | new/stop | 新建一个或停止指定(全部)任务(停止指定任务需要配合pid参数) | +| pid | 探测任务id | | +| prange | 探测范围,默认为全球 | | +| ptype | 探测任务类型,默认为v64 | | +| loop | 是否不间断重复探测任务 | | + +#### 探测任务 + + + +## 库表设计 +### MySQL数据库 +待定 +### 图数据库--Neo4J +#### 节点——ResolverFromDo53 +节点ID由Neo4J自动分配管理 + +| 属性名 | 说明 | 示例 | +|----------|-----------------------------------|:------------------| +| AS | 自治域号 | AS15169 | +| COU | 国家 | China | +| CODE | 国家代码 | CN | +| LAT | 纬度 | 39.916527 | +| LNG | 经度 | 116.397128 | +| ISP | 服务商 | Google Inc. | +| IPtype | IP类型(v4/v6) | v6 | +| PROVINCE | 省份 | Beijing | +| TIME | 首次发现时间 | 1234892919.655932 | +| LTIME | 最近一次发现时间 | 1234892919.655932 | +| IP | IP地址 | 2001::1 | +| W | 权重,实际等于总共被发现的次数,用以表现在实际解析中节点的关键程度 | 1 | + +#### 边(关联) +neo4j通过分别匹配相同的源节点和目的节点来找到对应的边 + +| 属性名 | 说明 | 示例 | +|-----|-------------------------------------|----| +| W | 权重,实际等于总共被发现的次数,用以表现实际解析中该解析路径的关键程度 | 1 | + + + + + + + diff --git a/core/README.md b/core/README.md deleted file mode 100644 index b2d8d1b..0000000 --- a/core/README.md +++ /dev/null @@ -1 +0,0 @@ -core包是ohmydns核心业务组件
\ No newline at end of file diff --git a/core/dnsserver/prober_http.go b/core/dnsserver/prober_http.go index b1fdb3b..8ee20e1 100644 --- a/core/dnsserver/prober_http.go +++ b/core/dnsserver/prober_http.go @@ -178,7 +178,6 @@ func (p *ProberHTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write(msg) return case "stop": - //TODO:探测停止 if n, pok := param["pid"]; pok { id, _ := strconv.Atoi(n[0]) err := p.proberlist.DeleteProberById(id) @@ -187,7 +186,7 @@ func (p *ProberHTTP) ServeHTTP(w http.ResponseWriter, r *http.Request) { } return } - // 无额外参数代表停止所有探测 + //TODO: 无额外参数代表停止所有探测 } } else { diff --git a/picture/image.png b/picture/image.png Binary files differnew file mode 100644 index 0000000..7c95156 --- /dev/null +++ b/picture/image.png diff --git a/plugin/pkg/prober/args.go b/plugin/pkg/prober/args.go index 5a532a1..91f6288 100644 --- a/plugin/pkg/prober/args.go +++ b/plugin/pkg/prober/args.go @@ -9,7 +9,6 @@ const ( const ( defaultPrange = "global" defaultPtype = "v64" - defaultAlladdrv4 = "test" defaultTarget = "n64.top" defaultStartsubv64 = "v4-1" defaultMaxGRout = 4000 //默认协程最大运行数 diff --git a/plugin/v64dns/setup.go b/plugin/v64dns/setup.go index e1a70ea..d9c4819 100644 --- a/plugin/v64dns/setup.go +++ b/plugin/v64dns/setup.go @@ -4,9 +4,9 @@ import ( "ohmydns2/core/dnsserver" "ohmydns2/plugin" olog "ohmydns2/plugin/pkg/log" + "ohmydns2/plugin/pkg/prober" "ohmydns2/plugin/v64dns/analyze" "strconv" - "ohmydns2/plugin/pkg/prober" "github.com/coredns/caddy" ) @@ -30,6 +30,7 @@ func setup(c *caddy.Controller) error { func parseArg(c *caddy.Controller) (*V64dns, error) { v := new(V64dns) v.p.maxLen = chain_maxlen + v.p.dmChange = false for c.Next() { arg := c.RemainingArgs() @@ -63,6 +64,7 @@ func parseArg(c *caddy.Controller) (*V64dns, error) { v.p.v6domain = args[1] + "." + v.zone v.p.v6subdomain = args[1] v.p.v4subdomain = args[0] + v.p.dmChange = true case "ip-embed": v.p.ipEmbed = true case "chain-mlen": @@ -87,8 +89,8 @@ func parseArg(c *caddy.Controller) (*V64dns, error) { } // 监控停止信号 go EL.Stop() - log.Infof("v64权威服务器启动, 工作参数为 Zone:%v, NS4:%v, NS6:%v, IPv4子域:%v, IPv6子域:%v",v.zone,v.ipv4NS,v.ipv6NS,v.p.v4subdomain,v.p.v6subdomain) - log.Infof("测试样例: "+prober.MakeTestProbev64(v.p.v4subdomain,v.zone)) + log.Infof("v64权威服务器启动, 工作参数为 Zone:%v, NS4:%v, NS6:%v, IPv4子域:%v, IPv6子域:%v", v.zone, v.ipv4NS, v.ipv6NS, v.p.v4subdomain, v.p.v6subdomain) + log.Infof("测试样例: " + prober.MakeTestProbev64(v.p.v4subdomain, v.zone)) return v, nil } diff --git a/plugin/v64dns/v64dns_policy.go b/plugin/v64dns/v64dns_policy.go index 4065d57..64c074a 100644 --- a/plugin/v64dns/v64dns_policy.go +++ b/plugin/v64dns/v64dns_policy.go @@ -19,7 +19,8 @@ type Policy struct { v4subdomain string v6subdomain string ipEmbed bool - maxLen int //解析链最大长度 + maxLen int //解析链最大长度 + dmChange bool //是否切换域名 } // expobject 代表了每个实验对象 @@ -222,7 +223,7 @@ func (v V64dns) ResponseCNAME(msg *dns.Msg, sip net.IP) *dns.Msg { maskPart += qs + "." case 2: subdomain = qs - newsubdomain = v.changeSubDomain(qs) + newsubdomain = v.changeSubDomain(qs, v.p.dmChange) case 5: expid = qs case 4: diff --git a/plugin/v64dns/v64dnsutil.go b/plugin/v64dns/v64dnsutil.go index 3941ab6..7d30c82 100644 --- a/plugin/v64dns/v64dnsutil.go +++ b/plugin/v64dns/v64dnsutil.go @@ -116,7 +116,12 @@ func (v V64dns) MatchType(s string) int { return 3 } -func (v V64dns) changeSubDomain(s string) string { +// 切换域名 +func (v V64dns) changeSubDomain(s string, changeFlag bool) string { + // 切换标志位为false,直接返回原域名 + if !changeFlag { + return s + } switch s { case v.p.v4subdomain: return v.p.v6subdomain |
