疧_╮線 2022-05-04 13:55:45
const data = [{
id: '1',
name: 'test1',
children: [
{
id: '11',
name: 'test11',
children: [
{
id: '111',
name: 'test111'
},
{
id: '112',
name: 'test112'
}
]
},
{
id: '12',
name: 'test12',
children: [
{
id: '121',
name: 'test121',
children: [
{
id: '1221',
name: 'test121',
children:[
{
id:'12345'
}
]
}
]
}
]
}
]
},
{
id:'1234',
children:[
{
id:'567'
}
]
}
]
const value = '112'
const fn = (value) => {
let err = 'return start'
let interim = JSON.parse(JSON.stringify(data))
let result = []
try {
while (interim.length > 0) {
let point = interim.pop()
let child = point.children
let queue = child
let cresult = []
result.push(point.id)
while (queue && queue.length > 0) {
let cpoint = queue.pop()
cresult.push(cpoint.id)
if (!cpoint.children || cpoint.id == value) {
if (cresult.indexOf(value) > -1) {
queue.length = 0
} else {
cresult = []
}
continue
}
queue.push(...cpoint.children)
}
if (result.concat(cresult).indexOf(value) > -1) {
result = result.concat(cresult)
throw new Error(err)
} else {
result = []
}
}
} catch (e) {
if (e.message === err) {
console.log(result.map(v => parseInt(v)))
return result.map(v => parseInt(v))
} else {
throw e
}
}
}
fn(value) // 输出 [1, 11, 112]
fn('1234') // 输出 [1234]
fn('12345') // 输出 [1, 12, 121, 1221, 12345]
写法是深度优先, 增加了数据结构的深度与广度,能可以正确输出
- 共 1 页
- 1
个人理解中间人攻击利用的是客户端和服务端认证阶段syn等泄露,伪装成客户端和服务端进行身份认证,从而拿到了服务端的公钥。同时为了持续保持劫持客户端的状态,需要将服务端的报文解密之后,混淆自己的类似广告等信息到新报文(如果不返回部分服务端内容的报文很容易被客户端识别出来网站可能是被劫持了),因此需要伪装成服务端生成一个公钥和客户端持续地通信,通过两头骗的方式,将自己的报文神不知鬼不觉地推送到了客户端。(如有理解偏差,劳烦指点,谢谢)
第 91 题:介绍下 HTTPS 中间人攻击