-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathwkm_ja3.php
72 lines (57 loc) · 2.43 KB
/
wkm_ja3.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
use Workerman\Connection\AsyncTcpConnection;
use \Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/lib/BinaryStream.php';
require_once __DIR__.'/lib/TLS_FP.php';
require_once __DIR__.'/lib/TLS_HELLO_PARSE.php';
require_once __DIR__.'/lib/DataShareServer.php';
$worker = new DataShareServer('127.0.0.1', 2207);
$global = new GlobalData\Client('127.0.0.1:2207');
define('INBOUND','tcp://0.0.0.0:9763');
define('OUTBOUND','tcp://example.com:443');
$web = new Worker(INBOUND);
$web->count = 1;
$web->onConnect = function($connection)
{
$connection_to_80 = new AsyncTcpConnection(OUTBOUND);
$connection->pipe($connection_to_80);
$connection->onMessage = function ($source, $data) use ($connection_to_80,&$connection) {
empty($connection->MEXT_REMOTE_PORT) && $connection->MEXT_REMOTE_PORT = $connection_to_80->getLocalPort();
if(empty($connection->tls_fp_client)){
global $global;
if($tls = TLS_HELLO_PARSE::get($data)){
$tls_pf['client'] = TLS_FP::init(['layers'=>['ip'=>['ip_ip_proto'=>6],'tls'=>$tls]])->ret();
$connection->tls_fp_client = 1;
$global->__set('REMOTE_PORT:'.$connection->MEXT_REMOTE_PORT,$tls_pf);
}
}
$connection_to_80->send($data);
};
$connection_to_80->pipe($connection);
$connection_to_80->onMessage = function ($source, $data) use (&$connection,$connection_to_80) {
if(empty($connection->tls_fp_server)){
global $global;
if($tls = TLS_HELLO_PARSE::get($data)){
$tls_pf = $global->__get('REMOTE_PORT:'.$connection->MEXT_REMOTE_PORT);
$tls_pf['sever'] = TLS_FP::init(['layers'=>['ip'=>['ip_ip_proto'=>6],'tls'=>$tls]])->ret_by_server();
$connection->tls_fp_server = 1;
$global->__set('REMOTE_PORT:'.$connection->MEXT_REMOTE_PORT,$tls_pf);
}
}
$connection->send($data);
};
$connection_to_80->onClose = function($connection_to_80){
global $global;
$global->__unset('REMOTE_PORT:'.$connection_to_80->LocalPort);
};
$connection_to_80->onConnect = function($connection_to_80){
$connection_to_80->LocalPort = $connection_to_80->getLocalPort();
};
$connection_to_80->connect();
};
// 如果不是在根目录启动,则运行runAll方法
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}