GithubHelp home page GithubHelp logo

Comments (16)

zfl9 avatar zfl9 commented on August 19, 2024

--add-tagchn-ip 允许定义 ipset name
目前 --add-taggfw-ip 需要指定 set name, 那是因为没有现有的 name 可用. 但 --add-tagchn-ip 却直接使用现有的name 也就是 chnroute{,6}, 但是这俩数据库的作用其实是为了处理上游dns解析结果的时候做判断依据用的, --add-tagchn-ip 这种做法会导致 chnroute{,6} 数据库出现变化, 然后可能在某些情况下影响判断, 比如刚好某 -m 的 list 里面解析出来内网ip, 那么内网ip加入进去了, 那么可能会影响后续的既不在 -g 也不在 -m 里面的域名的解析结果.

这个说的有道理,给 -a/--add-tagchn-ip 加个可选参数,即 -a=list4,list6--add-tagchn-ip=list4,list6

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

也就是说,现在有3类独立的set:

  • tag:none 域名,用于判定是否为大陆ip:--ipset-name4/--ipset-name6 (chnroute)
  • tag:chn 域名,用于收集白名单ip:--add-tagchn-ip (whitelist)
  • tag:gfw 域名,用于收集黑名单ip:--add-taggfw-ip (blacklist)

对于 --add-tagchn-ip,如果不指定 set,则使用 --ipset-name4/6 的 set;大部分情况下这样用就可以了

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

--add-tagchn-ip 和 --add-taggfw-ip 允许只设置 ipv4 的 set name
这样是为了配合 -N, 既然都丢弃了 ipv6了, 那么 新建 set6 就意义不大? 比如接受这样的参数 : set4 | set4,set6

这个还是不改了,主要是 --ipset-name6 默认就有值,如果 tagchn 和 taggfw 只提供 v4-set,逻辑上就不太“对称”。

当然,在使用-N过滤所有AAAA的情况下,确实不会触发任何v6-set的逻辑(无论是tag:none还是tag:gfw、tag:chn),因此你可以在 chinadns-ng 中指定一个假的 v6-set 的名字,不需要真的去创建它。

总之,为了匹配原有的历史设计(以及逻辑上的对称),还是需要指定 v4 和 v6,如果 v6 set 没用到,不去创建就好了。

from chinadns-ng.

cattyhouse avatar cattyhouse commented on August 19, 2024

LGTM

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

见最新release。

from chinadns-ng.

cattyhouse avatar cattyhouse commented on August 19, 2024

经测试

-a, --add-tagchn-ip=[set4,set6] 这个选项的参数只能用 =才生效, 不能用 -a set4,set6

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

getopt_long官方行为。
可选参数必须粘着

from chinadns-ng.

cattyhouse avatar cattyhouse commented on August 19, 2024

-A proxy4,proxy6 可以

from chinadns-ng.

cattyhouse avatar cattyhouse commented on August 19, 2024

getopt_long官方行为。
可选参数必须粘着

-a -A 短选项 行为不一致

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

因为一个是optional_arg,一个是required_arg,类似于 -N/--no-ipv6。

from chinadns-ng.

cattyhouse avatar cattyhouse commented on August 19, 2024

明白了, 哈哈, 第一次用的时候没用 =.

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

我总结一下:

对于 optional_argument:

  • 短选项,官方行为是必须粘着,比如 -Nfoobar,参数值就是foobar
  • 长选项,官方行为是必须=相连,比如 --no-ipv6=foobar
  • chinadns-ng这边为了统一长短选项的格式,短选项额外支持 -N=foobar形式

对于 required_argument:

  • 短选项,-Nfoobar-N foobar 都可以
  • 长选项,--no-ipv6=foobar--no-ipv6 foobar 都可以

可以看出,可选参数,不允许用空白符分开,一开始我也很惊讶,但这是 getopt 官方行为,所以也无权干涉。

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

https://man7.org/linux/man-pages/man3/getopt.3.html

from chinadns-ng.

cattyhouse avatar cattyhouse commented on August 19, 2024

OK,这俩选项我统一用长选项=了.

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

嗯,如果有强迫症,想风格统一,可以这样:

  • no_arg的选项:长选项和短选项都ok,即 -f--foo,但短选项不要于其他短选项相连,假设有另外一个短选项 -x,不要写成 -fx,而是分开 -f -x
  • required_arg的选项,短选项用空格分开-f abc、长选项用等号相连--foo=abc
  • optional_arg的选项,只是用长选项,无参数则--foo,有参数则--foo=abc

这样看起来就没什么问题了。

简单来说,optional_arg用长选项格式(--foo、--foo=abc),其他一律短选项(-f、-f abc),保证格式统一。

from chinadns-ng.

zfl9 avatar zfl9 commented on August 19, 2024

2023.06.01 版本改进了参数解析,选项与可选参数之间允许带空格了,与required_arg选项的语法保持一致。

from chinadns-ng.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.