基于tshark在原生php上实现ja3
他有什么用? 使用ja3来验证是否用户是爬虫,在传统的方案中,通常基于识别header来判断用户是机器人,但是这种方法极有可能被伪造header而误判,有时候管理员可能不希望某一个用户来访问,所以拉黑IP,但是如果他使用代理IP或者重启光猫,那么他又可以继续访问了,在现在绝大部分网站是支持ssl,所以我们可以通过tls指纹来判断用户是否是机器人。 例如:requests、httpx以及CURL,无论如何伪造信息他们的指纹都是相同的,所以管理员只需要记住他们的指纹,那么下一次遇到相同指纹时,就可以进行拦截。 项目原理 该项目基于php-ja3的原生移植,项目地址:php-ja3,在这个项目中,他使用的tshark进行数据包拦截,获取到ja3后通过DataShare进行数据传输,但是,在实际业务环境中,我们可能不会去使用workman,为了使用这个功能需要再安装一个workman,所以我移植到原生php中。 由于DataShare只能使用workman,所以在该项目移植中,我使用Redis来交互数据。 如何使用? 1、下载phpja3.zip 2、配置main.php中相关配置 12行配置tshark路径,通常情况下,如果你将wireshark安装到C盘下,就不需要该操作,该项缺省值为 $tshark = 'C:\\PROGRA~1\\Wireshark\\tshark.exe';
24行配置redis信息,该项缺省值为redis默认端口和本地 $redis->
connect
(
'127.0.0.1'
,
6379
);
31行配置业务网卡,填写网卡名称,该项缺省值为本地回环网卡
define(
"NETWORK_INTERFACE"
,
"Adapter for loopback traffic capture"
);
3、配置完成后直接启动该文件 php main.php 启动成功后应该是如下这样的
PS
D:\important\desktop\php_ja3> php .\main.php
Capturing
on
'Adapter for loopback traffic capture'
** (tshark:
15056
)
04
:
19
:
48
.
346861
[Main MESSAGE] -- Capture started. ** (tshark:
15056
)
04
:
19
:
48
.
349348
[Main MESSAGE] -- File:
"C:\Users\Administrator\AppData\Local\Temp\wireshark_NPF_LoopbackLLNM81.pcapng"
4、配置你的业务环境 样例代码,从redis中获取ja3信息
// usleep(50000);
sleep(
1
);
$redis
=
new
Redis();
$redis
->connect(
'127.0.0.1'
,
6379
);
$REMOTE_ADDR_PORT
=
$_SERVER
[
'REMOTE_PORT'
];
$ja3
=
'ja3_'
.
$REMOTE_ADDR_PORT
;
echo
$ja3
;
echo
$redis
->get(
$ja3
); 由于通过抓包嗅探,你需要延迟3000微秒以上第一次才会获取成功,如果你对这方面没有需求且没有延迟,第一次获取可能获取为空。 验证:浏览器环境 我们可以获取出用户的指纹
验证:爬虫 第一次
第二次
无论我们怎么变换模拟的header或其他请求信息,他的指纹都是相同的,我们只需要记录这个指纹,那么就可以轻松检测出爬虫。