说下我这已经验证的问题:本地运行采集代码无任何问题(MacOS),但放到服务器上(CentOS)上会出现 403 状态码,并弹出 Cloudflare 验证码页面。本地 IP 是用代理挂的服务器 IP ,无任何问题,但直接在服务器上跑不通。
urllib 包也皆为同一版本,header 头用的 ua 也是同一个。
服务器请求页面最下面有这样一行提示:Another way to prevent getting this page in the future is to use Privacy Pass. You may need to download version 2.0 now from the Chrome Web Store.说明是识别了 UA 的。除了 UA ,Cloudflare 还可能在哪些方面识别服务器呢?
1
ruixue 2022-05-12 18:21:40 +08:00
语言、时区、系统字体、屏幕分辨率、cpu 核心数,这些信息网页都可以获取的
|
2
huxins 2022-05-12 18:27:46 +08:00
|
3
swulling 2022-05-12 18:39:35 +08:00
爬虫识别而已,方案太多了。UA 只是最老的方法
|
4
realpg 2022-05-12 19:02:32 +08:00 1
IP 地址就可以过滤掉 90%的服务器环境……
|
5
letitbesqzr 2022-05-12 20:43:13 +08:00 1
什么 useragent 、分辨率等等 就不说了,那些都太常见的识别方式了。说几个容易忽视的点:
1. ip 地址能识别出 是否来自服务器 2. 无头浏览器的各种特征 ,比如 window.navigator.webdriver 等 3. tls 指纹 ,通过各种浏览器、或者 curl 、各语言的 http 请求库请求的 tls 指纹都有区别。 |
6
est 2022-05-12 21:24:06 +08:00
LZ 都说了用的 urllib+同样 hheaad 的服务器 ip ,这么多人说屏幕分辨率???
|
8
tg11 OP @letitbesqzr 1.本地挂的服务器代理,所以 IP 是一样的。2.用的同一套同一版本 urllib 库,所以不存在无头浏览器特征不一样的情况。3.还是同一套 urllib 库
|
9
neutrinos 2022-05-12 23:36:26 +08:00 via iPhone
IP reputation
|
10
xieqiqiang00 2022-05-12 23:47:04 +08:00 via Android
你这个环境是能运行 Js 的吗?
|
11
oott123 2022-05-12 23:49:03 +08:00 via Android
openssl 版本一样吗
|
12
fisherwei 2022-05-13 00:33:23 +08:00 2
先 tcpdump 一下看看发出去的包有啥区别
|
13
codefun666 2022-05-13 07:11:10 +08:00
IP 头部有的字段可以分析操作系统版本, no magic.
|
14
tg11 OP @xieqiqiang00 无论是本地,还是服务器,都是不能运行 js 的
|
15
Te11UA 2022-05-13 16:48:57 +08:00
90%是 SSL 指纹的原因
|