V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Mystery0  ›  全部回复第 2 页 / 共 21 页
回复总数  414
1  2  3  4  5  6  7  8  9  10 ... 21  
唉,已经离不开了,结果来一波这个事情,现在想换都找不到平替了 https://i.imgur.com/NIvxivj.png
@defunct9 #11 @tomatocici2333 #14 昨天下午我针对 A 做了多次账号登录的测试,使用 docker-atrust 提供 vpn 环境,然后在 Mac 上使用不同浏览器登录不同的账号,没有发现 A 系统有踢出的相关逻辑,应该和 A 关系不大


@for1shot #23 我今天( 26 号)下午做了很久的测试,用了 Reqable 抓包仔细对比了浏览器发送的请求头信息和程序设置的请求头,浏览器发送的头没有发现非常明显的针对风控的标识,但是程序的请求头有些过于死板了(从打开页面到最终请求登录接口,都十分的“标准”,时间戳参数要么都有,要么都没有,部分在浏览器端通过 js 发起的请求 [带有 X-Requested-With 头] 没有带上相对应的头),虽然这些“特征”不一定被 A 系统识别并检测了,我还是依次对比之后补上了一些请求头参数,现在从 Reqable 抓包来看,请求更“像”浏览器发起的了。

最后说一下关于 Atrust 部分,从我下午的测试情况来看,感觉出现问题的地方是和 Atrust 有关系,但是不知道是如何实现的:刚开始的时候我在通过浏览器和程序依次发送不同账号的登录请求,以此来对比两种请求方式的不同点并针对性的进行修改(具体差异见上一段)。持续了比较长的一段时间之后,就出现了一个明显异常的情况:这个时候在浏览器上我直接访问页面能够显示登录页面,但是输入任何账号(我本地测试用的是 3 个不同的账号)进行登录均无法登录,并且 [ [不再显示错误原因] ] !!!我保证测试账号的密码没有输错,验证码也没有输错,并且我试了很多次,都是这样的现象。
跟踪了一下这一种新的现象,具体表现为:
1.通过浏览器加载登录页面 GET /login.html (仅作说明,具体路径不是这个),无论是直接访问域名(未登录情况下会 302 到登录页面)还是直接访问登录页面
2.浏览器打开页面会正常显示,同时自动获取公钥( GET /public.html ),自动加载验证码( GET /kcaptcha )
3.在浏览器上输入账号、密码、验证码之后,页面正常发起登录请求( POST /login.html )
4.POST 请求返回 302 重定向状态码,但是 Location=/ (以前登录失败时返回的是 200 状态码,并且响应体内容位 html ,html 中带有错误原因)
5.因为 302 到了/,然后又走了一次第一步的流程,页面再自动 302 到/login.html ,因为是 302 过去的,所以是正常 GET /login.html ,也就没有错误信息了

今晚在家里的 windows 机器上,装了个 windows11 的虚拟机,登录上 Atrust 之后将代理服务器 B 部署进去,然后本地启动业务服务 C ,跑了三个账号的登录,没有发现什么问题(没有问题可能是特征暂时未识别出来,也可能是请求量太少没有达到并发的量),至少没有出现下午那种“不显示原因的直接失败”的情况了。

说说最终的结论吧,现在呢大概是能确定应该和 Atrust 有点关系,可能是 Atrust 检测到访问 A 系统的请求经过了代理( docker-atrust 里面用的 tinyproxy ,可能带了某些特征 [例如请求头] ),也可能是请求参数过于“标准”触发了 Atrust 的什么网络策略,然后 Atrust 对应该正常发送给 A 的数据包做了一些修改(不知道具体的修改内容)导致 A 接收数据不完整从而登录失败。
斗智斗勇了几天呢,今晚最后再上一次代码修改看看有没有什么改善,如果还是不行的话,就只能想办法绕过 Atrust 直接请求 A 了(想办法在大内网环境里面弄一台机器通过 tailscale 组网来直接提供接口代理),或者和 A 谈一下,被官方收编了算了……
@NoOneNoBody #30
更像是个数据代理,把客户请求及爬取返回内容优化?
————————
对,是做的这个


如果内容有大量重复,建议按规则做缓存,减少爬取次数
————————
现在服务端只处理数据,不会主动存储,客户端做了数据落库的缓存,但是也提供了“刷新”缓存数据的功能,每天第一次打开 APP 的时候会执行登录逻辑然后获取数据,这样做的原因也是因为以前出现过显示错误数据的情况导致了一些问题
@NoOneNoBody 有成功的,甚至现在都有成功的,因为正方提供的是教务数据,也就是课表之类的东西,学生上课时间是固定的,所以几年来只要是上课的日子都会在固定的时间点前后产生大量的请求。

从几天的请求响应监控来看,基本是上课时间前 20 分钟左右达到请求峰值,然后出现大量失败的请求,失败率在 50%甚至更高,(业务服务 C 对每一个返回给客户端的请求都有响应码和错误码的监控),上课之后请求量减少,成功率增加,大概是 75%-80%的成功率。等到一天的课程结束,特别是凌晨的时候,请求量特别少,这个时候成功率几乎大于 90%。

正方教务系统它是部署在学校机房的,往外没有 CDN (因为不提供公网访问,仅在校园网访问)
登录正方的账号都是用户自己的,登录 Atrust 的账号是我找学生借的(只有一个)
@for1shot #23 这个情况是 10.17 那一天突然开始出现的,倘若真是这个原因的话,我倾向于认为是 负责管理 Atrust 的管理人员,在那一天发现了 Atrust 有这个功能,然后给打开了
@for1shot #23 第二种确实有可能,也正好能解释为什么返回 html ,我想想办法按这个思路验证一下
@tomatocici2333 #21 如果是深信服拦截并处理的,返回的就不是 html 了,因为深信服不知道正方的 html 有什么东西。因此,如果是深信服检测并拦截了,那也只能是将检测结果给业务系统也就是正方,让正方来报错返回正方的 html
@for1shot 这种封堵一般会和业务系统绑定吗?
我在浏览器上测试的时候,看到的报错信息并不是直接返回的文本,而是整个 html ,html 渲染完成之后会在登录对话框中显示错误信息
如果是深信服的封堵,应该直接中断连接或者直接返回 text/plain 的数据(就是网页上几个大字),不会返回 html 数据,除非深信服识别之后将情况告知了业务系统 A 也就是正方,然后正方针对深信服告知的结果做了专门的错误信息处理。

写出来这些感觉可能性不强……
正方确实是很多高校使用的教务系统,校园网对外访问也是使用深信服的产品( easyconnect 、atrust 等),不过也说不好,也许上面有要求正方和深信服一起解决掉所有高校的爬虫问题?
@tomatocici2333 有账号,今晚我测试一下 A 的风控,看看是不是 A 的限制
@defunct9 #11 这算是一个可能的原因。如果是这样的话,我这爬虫的寿命相当于是终结了

不过业务系统 A 是个外包,应该不会专门做这种吧

明说了吧,业务系统 A 就是 正方教务系统 https://i.imgur.com/NIvxivj.png
@proxytoworld #8 这需要改一下代码,让来自用户的请求先临时停下来,然后再把 cookie 从 B 里面抓出来拿到 Windows 云服务器去访问测试

改动比较大,后面如果还是没有进展也只能试试了

不过说起来,我观察了浏览器上访问业务系统 A 时的请求,它的 Cookie 有刷新的情况,正常先加载 Html ,此时服务端 set 一个 cookie ,然后浏览器开始加载 js 、img 等资源,在这些加载过程中依旧会随机的 set 一个新的 cookie ,从观察情况来看,没有什么规律,也不确定为什么业务系统 A 要 set 一个新的 cookie
@zjsxwc 接触不到 A ,要爬它就是因为改不了动不了它呀 https://i.imgur.com/NIvxivj.png
@kkk9 参数应该是一样的,代理服务器 B 和业务服务 C 都是代码来发的请求,没有道理不一样
Windows 云服务器上的 Edge 浏览器在多次测试过程中使用的都是同一个账号和密码,也没有换浏览器,请求成功和失败的时候参数也应该是一样的

这个东西给我的感觉就像是:我用 Edge 刚刚获取到的 Cookie ,还没开始走到登录接口呢,就突然被什么东西给拿去用了(例如刷新验证码,或者登录其他账号了),等 Edge 走到登录接口了,Cookie 就有问题了
@proxytoworld 对,这也是我十分奇怪的点,按理说不管是不是深信服,VPN 都不应该会“篡改”请求的,但是除了 Atrust 之外,就没有地方可以怀疑了,除非是业务系统 A 改东西了。
因为我在服务器上单独测试过浏览器访问业务系统 A 了,问题依旧出现,说明问题应该不是出现在代理服务器 B 、业务服务器 C 甚至更加往下的服务器

这东西对我的冲击有点像“计算网络不存在了” https://i.imgur.com/NIvxivj.png
因为情况很复杂,所以写了很多的字配上图来说明情况,希望大佬们可以耐心看完 https://i.imgur.com/YGIx7lh.png
帖子不要沉了呀,求大家帮帮我
分子+1
61 天前
回复了 abcfreedom 创建的主题 Apple ios 有没有什么 app 能去掉图片隐私信息的
dama ?
63 天前
回复了 intoext 创建的主题 Debian Debian 这个系统你们一般怎么读?
底半
1  2  3  4  5  6  7  8  9  10 ... 21  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2775 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 19ms · UTC 08:56 · PVG 16:56 · LAX 00:56 · JFK 03:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.