系统是 windows 10 pro x64,DNS 工具是 dnsforwarder 。
现象就是下载东西在完成的一瞬间, dnsforwarder 就停止工作。不管是在主机里面用 chrome 自带的下载功能下载还是在 NAT 网络模式下的虚拟机里面用 IDM 下载。试过多个历史版本的 dnsforwarder ,都有这个问题,看来与版本无关了。
1 : widnows 10 pro x64
2 :程序位于 primo ramdisk 硬盘 P 盘
3 : chrome x64 自带的下载功能,下载文件保存于 primo ramdisk 虚拟的 R 盘
4 :主机 DNS : 127.0.0.1,同时开两个虚拟机 A/B 虚拟机 A 桥接,主机名, MAC ,固定 IP 地址与主机相同,虚拟机 B 是 NAT 模式
5 :试过多个 dnsforwarder 版本,都会停止工作,怀疑是 windows 10 与 dnsforwarder 有不兼容的地方。
下面是 windows 事件日志,程序设置还有程序日志
windows 事件日志:
日志名称: Application
来源: Application Error
日期: 2015/9/14 15:01:23
事件 ID: 1000
任务类别: (100 )
级别: 错误
关键字: 经典
用户: 暂缺
描述:
错误应用程序名称: dnsforwarder.exe ,版本: 0.0.0.0 ,时间戳: 0x55f54129
错误模块名称: dnsforwarder.exe ,版本: 0.0.0.0 ,时间戳: 0x55f54129
异常代码: 0xc0000005
错误偏移量: 0x000000000000bb68
错误进程 ID: 0x1858
错误应用程序启动时间: 0x01d0eebabd86d107
错误应用程序路径: P:\DNS Forwarder\dnsforwarder.exe
错误模块路径: P:\DNS Forwarder\dnsforwarder.exe
报告 ID: 1a49befb-48e2-4291-b804-892b86091cce
错误程序包全名:
错误程序包相对应用程序 ID:
事件 Xml:
1000
2
100
0x80000000000000
15480
Application
dnsforwarder.exe
0.0.0.0
55f54129
dnsforwarder.exe
0.0.0.0
55f54129
c0000005
000000000000bb68
1858
01d0eebabd86d107
P:\DNS Forwarder\dnsforwarder.exe
P:\DNS Forwarder\dnsforwarder.exe
1a49befb-48e2-4291-b804-892b86091cce
DNSFORWARDER 设置:
DNS 转发器的配置文件
Configure File for dnsforwarder
此配置文件最好是 ANSI 编码的
相对路径的写法
Windows :
支持用 % %' 包围起来的相对路径,比如%SYSTEMROOT%\System32\drivers\etc\hosts'。
`%PROGRAMDIRECTORY%' 表示程序所在的文件夹。
Linux :
支持类似 ${HOME}' 的变量,比如${HOME}/hosts'。
${PROGRAMDIRECTORY}' 表示程序的配置文件夹,一般为 /root/.dnsforwarder/',执行 `dnsforwarder -p' 可以获得具体的位置。
日志文件设置
LogOn
是否打开文件日志输出 (since 5.0.4 )
LogOn true
LogFileThresholdLength
单个日志文件大小的临界值(字节)(since 5.0.4 )
当日志文件大小超过这个临界值后,当前的日志文件将会被重命名,然后建立一个新的日志文件,继续记录日志
LogFileThresholdLength 102400
LogFileFolder
设定日志文件所在的文件夹 (since 5.0.4 )
日志文件初始的文件名为 dnsforwarder.log',当超过临界值之后,将会被重命名为 dnsforwarder.log.1'、`dnsforwarder.log.2' 等等,然后重新建立一个 dnsforwarder.log' 文件
此路径的默认值为程序所在的文件夹( Windows )或程序的配置文件夹( Linux )
LogFileFolder
本地
LocalInterface
设置在本地开启的界面,可以是本地回环地址 (127.0.0.1 ) ,本地局域网,以及互联网 (since 2.2 )
如果是 IPv6 地址,请在地址两端加上方括号,例如 ::1 、 fe80::699c:f79a:9bb6:1
LocalInterface 127.0.0.1
LocalPort
本地开启的端口 (since 2.2 )
LocalPort 53
OpenLocalTCP
在本地开启 TCP ,以便接收 TCP 协议的查询 (since 2.2 )
可选值: false' 或 true'
OpenLocalTCP true
IP 选择策略
服务器地址
您可以设置两组上游服务器,
一组是用 TCP 协议的服务器 (由 `TCPServer' 指定),
另一组是用 UDP 协议的服务器 (由 `UDPServer' 指定)
选项 `PrimaryServer' 用来指定首选的服务器(同时也指定了协议)
任何不在排除列表 (或者 GFW List ) 中的域都会优先通过首选服务器及其协议来查询,
在排除列表 (或者 GFW List ) 中的域会优先使用另一组服务器并通过另一种协议查询。
PrimaryServer
首选服务器 (since 2.2 )
可选值: TCP' 或 UDP'
PrimaryServer UDP
TCPServer
指定用 TCP 协议查询的上游服务器 (since 2.2 )
可以指定多个服务器,服务器之间用半角逗号隔开 (since 2.3 )
如果不加端口号,则默认为 53 (since 2.3 )
例如 192.168.1.2:500 以及 4.2.2.2 (since 2.3 )
对于 IPv6 地址,请在地址两端加方括号,例如 [2001:4860:4860::8888] 以及加端口的形式 [2001:4860:4860::8888]:53 (since 2.3 )
TCPServer 208.67.222.222,106.186.17.181:2053,202.12.27.33,202.216.228.18,168.95.1.1,208.67.220.222,208.67.220.220,8.8.4.4,8.8.8.8
TCPProxy
设置 TCP 查询时的 Socks5 代理服务器(试验功能) (since 5.0.11 )
写法和 `TCPServer' 一样
可以指定多个服务器,服务器之间用半角逗号隔开
如果不加端口号,则默认为 1080
此选项如果不为空,则当通过 TCP 协议向上游服务器查询时,通过此选项设置的代理进行
如果此选项为空,则当通过 TCP 协议向上游服务器查询时,直接与服务器进行连接
此选项对通过 UDP 协议向上游服务器的查询无效
UDPServer
指定用 UDP 协议查询的上游服务器 (since 2.2 )
可以指定多个服务器,服务器之间用半角逗号隔开 (since 2.3 )
如果不加端口号,则默认为 53 (since 2.3 )
例如 192.168.1.2:500 以及 4.2.2.2 (since 2.3 )
对于 IPv6 地址,请在地址两端加方括号,例如 [2001:4860:4860::8888] 以及加端口的形式 [2001:4860:4860::8888]:53 (since 2.3 )
UDPServer 202.102.152.3,180.76.76.76,222.175.157.55,223.6.6.6,223.5.5.5,42.120.21.30,202.102.154.3,202.102.128.68,202.102.134.69,208.67.222.222,219.146.1.66,219.147.1.66,178.79.131.110,199.91.73.222
DedicatedServer ,,...
为某些域名指定专门的查询服务器,而不使用服务器列表( TCPServer' 和 UDPServer')中的服务器 (since 2.5 b1 )
格式为:域名 服务器地址
例如: DedicatedServer www.google.com 8.8.8.8
这样所有对域名 www.google.com 的查询都通过 8.8.8.8 这个服务器来进行
如果所指定的域名不在排除列表中,那么将通过 `PrimaryServer' 所指定的协议与服务器通讯,
否则将通过另一种协议与服务器通讯。
不同项之间用半角逗号 (`,') 分隔,同时注意最后不要有逗号
可以有多条 `DedicatedServer' 选项
服务器选项
ParallelQuery
是否启用 UDP 并发查询 (since 2.6 b1 )
并发查询指的是,向所有指定的 UDP 服务器发送查询请求,取最先接受到的有效回复作为查询结果,并丢弃其余的回复
开启此选项必须保证 `UDPServer' 中的服务器都是 IPv4 或者都是 IPv6 的
此选项不影响 `DedicatedServer' 的设置,也就是说,对于已经指定专用服务器的域名,只通过专用服务器进行查询
可选值: false' 或 true'
ParallelQuery true
UDPAntiPollution
是否开启 UDP 防污染 (since 2.6 b1 )
“防污染”指的是过滤伪造的 DNS 数据包
开启时需要保证 UDPServer' 中存在国外的 DNS 服务器,如果配合使用 UDPBlock_IP' 选项将大大提高过滤的精确度
可选值: false' 或 true'
UDPAntiPollution false
UDPBlock_IP ,,.....
阻挡含有以下 IP 地址(支持 IPv4 和 IPv6 地址 (since 5.0.11 ) )的 UDP DNS 数据包 (since 2.6 b1 )
仅对通过 UDP 服务器查询而来的 DNS 数据包有效
以下列表中已经含有部分伪造的 IP 地址,可以执行 `dnsforwarder -P' 来获取更多伪造的 IP 地址
如果 UDPAntiPollution' 为 false',此选项无效
IPv6 地址不用加方括号
UDPBlock_IP 243.185.187.39,46.82.174.68,37.61.54.158,93.46.8.89,59.24.3.173,203.98.7.65,8.7.198.45,78.16.49.15,159.106.121.75
IPSubstituting ,,.....
替换 DNS 数据包中的 IP 地址(只支持 IPv4 地址) (since 5.0.1 )
例如:
IPSubstituting 127.0.0.1 1.2.0.127
的效果是把 DNS 数据包中所有的 127.0.0.1 地址替换为 1.2.0.127
仅替换通过服务器( TCP 和 UDP )查询而来的 DNS 数据包,对于缓存中和 Hosts 中的结果无效
多条替换项目用半角逗号 (,') 分隔,也可以写多行 IPSubstituting'
IPSubstituting
排除列表
ExcludedDomain ,,.....
排除列表,每个域之间用半角逗号 (`,') 分隔,同时注意最后不要有逗号 (since 2.2 )
支持通配符。 (since 2.2.2 )
一个项目如果不含通配符,则从域名尾部开始匹配,例如 123.com' 则会匹配所有以 123.com' 结尾的域名。
如果含通配符则严格按照通配符来匹配。
可以有多条 `ExcludedDomain' 选项 (since 2.2.2 )
ExcludedDomain
ExcludedList
从文件载入到排除列表 (since 5.0.3 )
ExcludedList
GfwList
加载 GFW List (since 2.2.3 )
GFW List 中的域名将被添加到排除列表
如果保留为空,则不载入 GFW List
GfwList https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
GfwListBase64Decode
GFW List 是否需要 Base64 解码
可选值: false' 或 true'
GfwListBase64Decode true
GfwListUpdateInterval
重新载入 GFW List 的间隔时间,秒 (since 2.2.4 )
-1 表示不重新载入
如果保留为空。则使用默认值 (21600 )
GfwListUpdateInterval 21600
GfwListRetryInterval
当下载 GFW List 失败后的重试时间,秒 (since 2.2.4 )
如果保留为空,则使用默认值 (30 )
GfwListRetryInterval 30000
GfwListDownloadPath
GFW List 下载到本地文件的路径 (since 2.3 )
支持相对路径 (since 5.0.3 )
如果保留为空,则默认在与程序所在相同的文件夹内( Windows )或程序的配置文件夹内( Linux )
GfwListDownloadPath
Hosts
Hosts
Hosts 文件的 URL ,可以是本地 Hosts 文件 (以 file:// 开头,支持相对路径),也可以是网络上的 Hosts 文件 (以 http:// 或者 https:// 开头)。 (since 5.0.5 )
例如 file://C:/Windows/System32/drivers/etc/hosts 或 file:///etc/hosts 或 http://xxx.com/hosts
可以指定多个 Hosts ,以半角逗号(,')分隔,也可以写多条 Hosts',路径两头不要加引号
在 Hosts 文件中,支持通配符 (*' 和?') (只能在域名中出现通配符)
Hosts 文件必须是原始格式,不能是压缩文件或者 HTML 文件
Hosts 文件最好是 ANSI 编码的
Hosts 中的 IPv6 地址不用加方括号
如果保留为空,则不从文件载入 Hosts
HostsUpdateInterval
重新载入 Hosts 文件的间隔时间,秒 (since 2.2 )
-1 表示不重新载入
如果保留为空,则使用默认值 (18000 )
HostsUpdateInterval 18000
HostsDownloadPath
Hosts 文件的下载到本地文件的路径 (不是文件夹路径) (since 2.2 )
例如 C:\Windows\Temp\hosts 或者 /tmp/hosts
支持相对路径 (since 5.0.3 )
如果文件存在则覆盖
如果保留为空,则默认在与程序所在相同的文件夹内( Windows )或程序的配置文件夹内( Linux )
HostsDownloadPath
HostsScript
在每次下载完 Hosts 文件后、加载 Hosts 文件之前执行的脚本 (since 2.2 )
支持相对路径 (since 5.0.3 )
如果保留为空,则不执行脚本
HostsScript
HostsRetryInterval
当网络 Hosts 下载失败后的重试时间,秒 (since 2.2.2 )
仅对网络 Hosts 有效
如果保留为空,则使用默认值 (30 )
HostsRetryInterval 30
AppendHosts ,,...
附加的 hosts ,即使 `Hosts' 选项为空也照样载入 (since 2.2.2 )
的写法与文件中的一样,同样支持通配符
IPv6 地址不用加方括号
多条 hosts 可以用半角逗号分隔开,也可以写多条 `AppendHosts'
比如可以写成:
AppendHosts 127.0.0.1 123.com,127.0.0.1 456.com,1.2.3.4 foobar.*
也可以分多条写:
AppendHosts 127.0.0.1 123.com
AppendHosts 127.0.0.1 456.com
AppendHosts 1.2.3.4 foobar.*
也可以定义 CName 的 Hosts 项,例如:
AppendHosts www.google.cn *.google.com
这样所有匹配 *.google.com 的域名都将指向 www.google.cn 的 IP 地址 (since 2.3 )
如果使某些域名跳过在 hosts 中的查询,可以
AppendHosts @@ *.012345.com
这样所有匹配 *.012345.com 的域名都不会在 hosts 中查询
各种 hosts 的优先级从高到低
带 `@@' 的禁止项
一般 hosts 项
CName hosts 项
在以上的基础上:
AppendHosts' 指定的 hosts 比 Hosts' 配置选项指定的文件中的 hosts 的优先级高
排在越前的 `Hosts' 项优先级越高
排在越前的 hosts 条目优先级越高
AppendHosts
DisableIpv6WhenIpv4Exists
如果一个域名在 Hosts 被指定了一个 IPv4 地址(包括文件 Hosts 和 `AppendHosts' 指定的 Hosts ),那么拒绝对这个域名的 IPv6 地址查询 (since 5.0.12 )
DisableIpv6WhenIpv4Exists false
缓存控制
UseCache
是否使用缓存(默认为文件缓存) (since 2.2 )
可选值: false' 或 true'
UseCache false
CacheSize
缓存大小 (字节)
缓存大小不能小于 102400 (100KB ) (since 2.3 )
CacheSize 1048576
MemoryCache
是否使用内存缓存,而不是文件缓存 (since 2.3.2 )
如果 UseCache' 为 false',此选项无效
可选值: false' 或 true'
MemoryCache true
CacheFile
手工指定缓存文件 (不是文件夹) (since 2.3 )
支持相对路径 (since 5.0.3 )
如果保留为空,则默认在与程序所在相同的文件夹内( Windows )或程序的配置文件夹内( Linux )
如果 MemoryCache' 为 true',此选项无效
CacheFile
IgnoreTTL
是否忽略 TTL (since 2.2 )
可选值: false' 或 true'
为 `true' 时将忽略 TTL ,此时所有的缓存条目将不会被移除
为 `false' 时不忽略 TTL ,缓存条目将会按照 TTL 的时间来移除
当 UseCache' 的值为 false' 时,此选项无效
IgnoreTTL false
OverrideTTL
强制使所有缓存的条目的 TTL 为 (since 2.2 )
若 为 -1 ,则表示不进行强制
当 UseCache' 的值为 false' 时,此选项无效
OverrideTTL -1
MultipleTTL
将所有缓存条目的 TTL 加倍,倍数为 (since 2.2 )
当 UseCache' 的值为 false' 时,此选项无效
当 IgnoreTTL' 的值为 true' 时,此选项无效
MultipleTTL 1
ReloadCache
当程序启动后是否重新载入已有的文件缓存 (since 2.2.3 )
已有的缓存大小必须和 `CacheSize' 所指定的大小相等
可选值: false' 或 true'
如果 MemoryCache' 的值为 true',此选项无效
ReloadCache false
OverwriteCache
如果已有的文件缓存无法重载,是否直接将其覆盖掉 (since 2.3 )
可选值: false' 或 true'
如果 MemoryCache' 的值为 true',此选项无效
如果 ReloadCache' 的值为 false',此选项无效
OverwriteCache false
杂项
DisabledType ,,.....
禁止查询的 DNS 类型列表,每个类型(用数字代表)之间用半角逗号 (`,') 分隔 (since 2.2 )
所有的 DNS 类型:
A 1 IPv4 地址
AAAA 28 IPv6 地址
APL 42
CERT 37
CNAME 5
DHCID 49
DLV 32769
DNAME 39
DNSKEY 48
DS 43
HIP 55
IPSECKEY 45
KEY 25
KX 36
LOC 29
MX 15
NAPTR 35
NS 2 Name Server
NSEC 47
NSEC3 50
NSEC3PARAM 51
PTR 12 Domain pointer
RRSIG 46
RP 17
SIG 24
SOA 6 start of authority record
SPF 99
SRV 33
SSHFP 44
TA 32768
TKEY 249
TSIG 250
TXT 16
ANY 255
AXFR 252
IXFR 251
OPT 41
DisabledType
DisabledDomain ,,.....
禁止查询的域列表,每个域之间用半角逗号 (`,') 分隔 (since 2.2 )
支持通配符。 (since 2.2.2 )
一个项目如果不含通配符,则从域名尾部开始匹配,例如 123.com' 则会匹配所有以 123.com' 结尾的域名。
如果含通配符则严格按照通配符来匹配。
可以有多条 DisabledDomain (since 2.2.2 )
DisabledDomain
DisabledList
从文件载入到禁用列表 (since 5.0.3 )
DisabledList
RefusingResponseCode
当拒绝一次查询( DisabledType' 或者 DisabledDomain')的时候所返回的状态码 (since 2.6 b1 )
状态码 描述
0 No error condition
1 Format error
2 Server failure
3 Name Error (NXDOMAIN )
4 Not Implemented
5 Refused
参见 RFC 1035 , 4.1.1. Header section format', Response code'
RefusingResponseCode 0
DomainStatistic
是否启用域名统计 (since 2.5 b1 )
可选值: false' 或 true'
DomainStatistic false
StatisticUpdateInterval
域名统计刷新时间间隔(秒) (since 2.5 b1 )
StatisticUpdateInterval 29
DNSforwarder 日志:
New session
[INFO] Excluded & Disabled list initialized.
[INFO] Local hosts file : "P:\DNS Forwarder\hosts.txt"
[INFO] Loading the existing hosts file ...
[INFO] IPv4 Host domain is duplicated : cpro.baidu.com, take only the first occurrence.
[INFO] IPv4 Host domain is duplicated : focusbaiduafp.allyes.com, take only the first occurrence.
[INFO] Loading hosts file completed, 75 IPv4 Hosts, 0 IPv6 Hosts, 0 CName Redirections, 0 items are excluded.
[INFO] UDP socket 127.0.0.1:53 created.
[INFO] TCP socket 127.0.0.1:53 created.
[INFO] Now you can set DNS to 127.0.0.1.
[INFO] Getting hosts from file://D:/百度云同步盘 /电脑软件 /F-GFW\dnsforwarder/5.X/hostsown.txt ...
[INFO] Hosts file://D:/百度云同步盘 /电脑软件 /F-GFW\dnsforwarder/5.X/hostsown.txt saved.
[INFO] Hosts saved at P:\DNS Forwarder\hosts.txt.
[INFO] IPv4 Host domain is duplicated : cpro.baidu.com, take only the first occurrence.
[INFO] IPv4 Host domain is duplicated : focusbaiduafp.allyes.com, take only the first occurrence.
[INFO] Loading hosts file completed, 75 IPv4 Hosts, 0 IPv6 Hosts, 0 CName Redirections, 0 items are excluded.
Sep 14 14:47:39 [U][127.0.0.1][IPv4 Address][6to4.ipv6.microsoft.com] : 57 bytes
IPv4 Address:192.88.99.1
Sep 14 14:47:39 [U][127.0.0.1][IPv4 Address][settings-win.data.microsoft.com] : 156 bytes
Canonical Name:settings.data.glbdns2.microsoft.com
Canonical Name:onesettings-hk2.metron.live.com.nsatc.net
IPv4 Address:111.221.29.253
Sep 14 14:47:39 [U][127.0.0.1][IPv6 Address][settings-win.data.microsoft.com] : 85 bytes
Canonical Name:settings.data.glbdns2.microsoft.com
Sep 14 14:47:39 [U][127.0.0.1][IPv4 Address][dm2301.storage.live.com] : 512 bytes
Canonical Name:dm2301geo.storage.skyprod.akadns.net
Canonical Name:dm2301.storage.skyprod.akadns.net
IPv4 Address:134.170.104.176
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Name Server:a1-128.akadns.net
Sep 14 14:47:39 [U][127.0.0.1][IPv6 Address][dm2301.storage.live.com] : 175 bytes
Canonical Name:dm2301geo.storage.skyprod.akadns.net
Canonical Name:dm2301.storage.skyprod.akadns.net
start of authority record:
primary name server:internal.akadns.net
responsible mail addr:hostmaster.akamai.com
serial:1442211917
refresh:90000
retry:90000
expire:90000
default TTL:180
Sep 14 14:47:39 [U][127.0.0.1][IPv4 Address][cdn.content.prod.cms.msn.com] : 164 bytes
Canonical Name:cdn.content.prod.cms.msn.com.edgesuite.net
Canonical Name:a1784.g2.akamai.net
IPv4 Address:184.50.87.138
IPv4 Address:184.50.87.136
Sep 14 14:47:39 [U][127.0.0.1][IPv6 Address][cdn.content.prod.cms.msn.com] : 191 bytes
Canonical Name:cdn.content.prod.cms.msn.com.edgesuite.net
Canonical Name:a1784.g2.akamai.net
start of authority record:
primary name server:n0g2.akamai.net
responsible mail addr:hostmaster.akamai.com
serial:1442213226
refresh:1000
retry:1000
expire:1000
default TTL:1800
Sep 14 14:47:39 [U][127.0.0.1][IPv4 Address][platform.cn.bing.com] : 193 bytes
.........................................................
Sep 14 15:01:20 [U][127.0.0.1][IPv4 Address][ied-tqos.qq.com] : 173 bytes
IPv4 Address:123.129.224.116
IPv4 Address:123.129.225.234
Name Server:ns-cnc1.qq.com
Name Server:ns-cnc1.qq.com
Sep 14 15:01:20 [U][127.0.0.1][IPv4 Address][ied-tqos.qq.com] : 65 bytes
IPv4 Address:123.129.224.116
IPv4 Address:123.129.225.234
Sep 14 15:01:20 [U][127.0.0.1][IPv4 Address][ied-tqos.qq.com] : 65 bytes
IPv4 Address:123.129.225.234
IPv4 Address:123.129.224.116
Sep 14 15:01:21 [U][127.0.0.1][IPv4 Address][q4.qlogo.cn] : 125 bytes
Canonical Name:q.qlogo.cn
IPv4 Address:220.249.243.55
IPv4 Address:58.251.61.188
IPv4 Address:163.177.68.200
IPv4 Address:112.90.83.47
IPv4 Address:112.90.83.50
Sep 14 15:01:21 [U][127.0.0.1][IPv4 Address][q4.qlogo.cn] : 125 bytes
Canonical Name:q.qlogo.cn
IPv4 Address:220.249.243.55
IPv4 Address:112.90.83.50
IPv4 Address:58.251.61.188
IPv4 Address:163.177.68.200
IPv4 Address:112.90.83.47
Sep 14 15:01:21 [U][127.0.0.1][IPv4 Address][q4.qlogo.cn] : 125 bytes
Canonical Name:q.qlogo.cn
IPv4 Address:58.251.61.188
IPv4 Address:163.177.68.200
IPv4 Address:112.90.83.47
IPv4 Address:112.90.83.50
IPv4 Address:220.249.243.55
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.