Skip to content

Commit a141c9e

Browse files
DNS查询失败的日志优化,避免真正的异常丢失。
1 parent 52805fe commit a141c9e

File tree

2 files changed

+62
-10
lines changed

2 files changed

+62
-10
lines changed

packages/mitmproxy/src/lib/dns/base.js

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,18 @@ module.exports = class BaseDNS {
124124

125125
async _lookup (hostname) {
126126
const start = Date.now()
127+
128+
let response
127129
try {
128130
// 执行DNS查询
129131
log.debug(`[DNS-over-${this.dnsType} '${this.dnsName}'] query start: ${hostname}`)
130-
const response = await this._doDnsQuery(hostname)
132+
response = await this._doDnsQuery(hostname, 'A', start)
133+
} catch {
134+
// 异常日志在 _doDnsQuery已经打印过,这里就不再打印了
135+
return []
136+
}
137+
138+
try {
131139
const cost = Date.now() - start
132140
log.debug(`[DNS-over-${this.dnsType} '${this.dnsName}'] query end: ${hostname}, cost: ${cost} ms, response:`, response)
133141

@@ -145,18 +153,19 @@ module.exports = class BaseDNS {
145153

146154
return ret
147155
} catch (e) {
148-
log.error(`[DNS-over-${this.dnsType} '${this.dnsName}'] DNS query error, hostname: ${hostname}${this.dnsServer ? `, dnsServer: ${this.dnsServer}` : ''}${this.dnsServerPort ? `:${this.dnsServerPort}` : ''}, cost: ${Date.now() - start} ms, error:`, e)
156+
log.error(`[DNS-over-${this.dnsType} '${this.dnsName}'] 解读响应失败,response:`, response, ', error:', e)
149157
return []
150158
}
151159
}
152160

153-
_doDnsQuery (hostname, type) {
161+
_doDnsQuery (hostname, type = 'A', start) {
154162
return new Promise((resolve, reject) => {
155163
// 设置超时任务
156164
let isOver = false
157165
const timeout = 6000
158166
const timeoutId = setTimeout(() => {
159167
if (!isOver) {
168+
log.error(`[DNS-over-${this.dnsType} '${this.dnsName}'] DNS查询超时, hostname: ${hostname}, type: ${type}, ${this.dnsServer ? `, dnsServer: ${this.dnsServer}` : ''}${this.dnsServerPort ? `:${this.dnsServerPort}` : ''}, cost: ${Date.now() - start} ms`)
160169
reject(new Error('DNS查询超时'))
161170
}
162171
}, timeout)
@@ -171,11 +180,17 @@ module.exports = class BaseDNS {
171180
.catch((e) => {
172181
isOver = true
173182
clearTimeout(timeoutId)
183+
if (e.message === 'DNS查询超时') {
184+
log.error(`[DNS-over-${this.dnsType} '${this.dnsName}'] DNS查询超时. hostname: ${hostname}, type: ${type}, ${this.dnsServer ? `, dnsServer: ${this.dnsServer}` : ''}${this.dnsServerPort ? `:${this.dnsServerPort}` : ''}, cost: ${Date.now() - start} ms`)
185+
} else {
186+
log.error(`[DNS-over-${this.dnsType} '${this.dnsName}'] DNS查询错误, hostname: ${hostname}, type: ${type}${this.dnsServer ? `, dnsServer: ${this.dnsServer}` : ''}${this.dnsServerPort ? `:${this.dnsServerPort}` : ''}, cost: ${Date.now() - start} ms, error:`, e)
187+
}
174188
reject(e)
175189
})
176190
} catch (e) {
177191
isOver = true
178192
clearTimeout(timeoutId)
193+
log.error(`[DNS-over-${this.dnsType} '${this.dnsName}'] DNS查询异常, hostname: ${hostname}, type: ${type}${this.dnsServer ? `, dnsServer: ${this.dnsServer}` : ''}${this.dnsServerPort ? `:${this.dnsServerPort}` : ''}, cost: ${Date.now() - start} ms, error:`, e)
179194
reject(e)
180195
}
181196
})

packages/mitmproxy/test/dnsTest-abroad.mjs

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,46 @@ const preSetIpList = matchUtil.domainMapRegexply({
1111

1212
// 境外DNS测试
1313
const dnsProviders = dns.initDNS({
14+
// udp
15+
cloudflareUdp: {
16+
server: 'udp://1.1.1.1',
17+
},
18+
quad9Udp: {
19+
server: 'udp://9.9.9.9',
20+
},
21+
22+
// tcp
23+
cloudflareTcp: {
24+
server: 'tcp://1.1.1.1',
25+
},
26+
quad9Tcp: {
27+
server: 'tcp://9.9.9.9',
28+
},
29+
1430
// https
1531
cloudflare: {
16-
type: 'https',
1732
server: 'https://1.1.1.1/dns-query',
18-
cacheSize: 1000,
1933
},
2034
quad9: {
2135
server: 'https://9.9.9.9/dns-query',
22-
cacheSize: 1000,
2336
forSNI: true,
2437
},
2538
rubyfish: {
2639
server: 'https://rubyfish.cn/dns-query',
27-
cacheSize: 1000,
2840
},
2941
py233: {
3042
server: ' https://i.233py.com/dns-query',
31-
cacheSize: 1000,
3243
},
3344

3445
// tls
3546
cloudflareTLS: {
3647
type: 'tls',
3748
server: '1.1.1.1',
3849
servername: 'cloudflare-dns.com',
39-
cacheSize: 1000,
4050
},
4151
quad9TLS: {
4252
server: 'tls://9.9.9.9',
4353
servername: 'dns.quad9.net',
44-
cacheSize: 1000,
4554
},
4655
}, preSetIpList)
4756

@@ -76,6 +85,34 @@ console.log('\n\n')
7685
assert.strictEqual(ip, noPresetHostname) // 未预设IP,等于域名自己
7786

7887

88+
console.log('\n--------------- test udp ---------------\n')
89+
ip = await dnsProviders.cloudflareUdp.lookup(hasPresetHostname)
90+
assert.strictEqual(ip, presetIp) // test preset
91+
console.log('\n\n')
92+
93+
assert.strictEqual(dnsProviders.cloudflareUdp.dnsType, 'UDP')
94+
ip = await dnsProviders.cloudflareUdp.lookup(hostname1)
95+
console.log(`===> test cloudflare: ${hostname1} ->`, ip, '\n\n')
96+
97+
assert.strictEqual(dnsProviders.quad9Udp.dnsType, 'UDP')
98+
ip = await dnsProviders.quad9Udp.lookup(hostname1)
99+
console.log(`===> test quad9: ${hostname1} ->`, ip, '\n\n')
100+
101+
102+
console.log('\n--------------- test tcp ---------------\n')
103+
ip = await dnsProviders.cloudflareTcp.lookup(hasPresetHostname)
104+
assert.strictEqual(ip, presetIp) // test preset
105+
console.log('\n\n')
106+
107+
assert.strictEqual(dnsProviders.cloudflareTcp.dnsType, 'TCP')
108+
ip = await dnsProviders.cloudflareTcp.lookup(hostname1)
109+
console.log(`===> test cloudflare: ${hostname1} ->`, ip, '\n\n')
110+
111+
assert.strictEqual(dnsProviders.quad9Tcp.dnsType, 'TCP')
112+
ip = await dnsProviders.quad9Tcp.lookup(hostname1)
113+
console.log(`===> test quad9: ${hostname1} ->`, ip, '\n\n')
114+
115+
79116
console.log('\n--------------- test https ---------------\n')
80117
ip = await dnsProviders.cloudflare.lookup(hasPresetHostname)
81118
assert.strictEqual(ip, presetIp) // test preset

0 commit comments

Comments
 (0)