5 changed files with 309 additions and 2 deletions
@ -1,3 +1,7 @@ |
|||
# crosscheck_auto_shell |
|||
|
|||
crosscheck自动登录脚本 |
|||
crosscheck自动登录脚本 |
|||
|
|||
crosscheck网站登录监控很严,服务器经常被ban掉。 |
|||
|
|||
此程序用于在可用服务器做自动登录,海外服务器可远程获取到cookie字串 |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
<?php |
|||
// 获取用户cookie值 |
|||
$user = $_GET['user']; |
|||
if(empty($user)){ |
|||
exit(''); |
|||
} |
|||
$cookie_path = __DIR__ . '/../cookie_file/'.$user.'.txt'; |
|||
if(!file_exists($cookie_path)){ |
|||
exit(''); |
|||
} |
|||
$str_cookie = file_get_contents($cookie_path); |
|||
exit($str_cookie); |
|||
@ -0,0 +1,98 @@ |
|||
<?php |
|||
include(__DIR__ . '/../lib/mCrossCheck.php'); |
|||
ini_set('date.timezone', 'Asia/Shanghai'); |
|||
// 同一时间只能有一个进程在运行 |
|||
$lock_file = __DIR__ . '/crosscheck_auto_shell.lock'; |
|||
if (file_exists($lock_file)) { |
|||
echo '另一个进程正在运行,请稍后重试。' . PHP_EOL; |
|||
exit(1); |
|||
} |
|||
// 创建锁文件 |
|||
touch($lock_file); |
|||
|
|||
$log_file = __DIR__ . '/../logs/'.date('Y-m-d').'/crosscheck_auto_shell.log'; |
|||
$log_dir = dirname($log_file); |
|||
if(!is_dir($log_dir)){ |
|||
mkdir($log_dir, 0777, true); |
|||
} |
|||
|
|||
try{ |
|||
$obj = new mCrossCheck(); |
|||
|
|||
|
|||
$list = $obj->getCrossCheckAccount(); |
|||
|
|||
// 测试数据 |
|||
// $list[] = [ |
|||
// 'user' => 'mayi001', |
|||
// 'passwd' => 'Eg98*!f@42', |
|||
// 'ext_info' => 'crossref-26027,zzz', |
|||
// ]; |
|||
|
|||
if (empty($list)){ |
|||
throw new Exception('获取crosscheck账号列表为空'); |
|||
} |
|||
foreach($list as $v){ |
|||
// 获得crosscheck账号密码 |
|||
$user = trim($v['user']); |
|||
$passwd = $v['passwd']; |
|||
|
|||
$extdata = explode(',', $v['ext_info']); |
|||
$tenant = $extdata[0]; |
|||
// 账号cookie文件路径 |
|||
$cookie_path = __DIR__ . '/../cookie_file/'.$user.'.txt'; |
|||
$obj->cookie_path = $cookie_path ; |
|||
if (file_exists($cookie_path)) { |
|||
chown($cookie_path, 'nobody'); |
|||
chgrp($cookie_path, 'nobody'); |
|||
chmod($cookie_path, 0777); |
|||
} |
|||
// 检测账号cookie是否有效 |
|||
$res = $obj->islogin(); |
|||
if ($res) { |
|||
// 账号cookie有效,无需登录 |
|||
//exit('账号cookie有效,无需登录'.$user.PHP_EOL); |
|||
$str_log = date('Y-m-d H:i:s')."|验证成功|".$user; |
|||
file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND); |
|||
}else{ |
|||
//exit('账号cookie过期,无需登录'.$user.PHP_EOL); |
|||
// 账号cookie过期,需要重新登录 |
|||
unlink($cookie_path); // 删除过期cookie |
|||
|
|||
// 执行java登录脚本,获取脚本运行的时间 |
|||
$start_time = time(true); |
|||
$cmd = 'java -jar /datacenter/java/crossrefLogin.jar "' . $user.'" "'.$passwd.'" "'.$cookie_path.'"'; |
|||
$console_str = trim(shell_exec($cmd)); |
|||
|
|||
// 计算脚本运行时间 |
|||
$end_time = time(true); |
|||
$run_time = $end_time - $start_time; |
|||
$run_time_str = date('i:s', $run_time); |
|||
$str_log = date('Y-m-d H:i:s')."|登录信息|".$console_str."|运行时间:".$run_time_str; |
|||
file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND); |
|||
// 判断登录是否成功 |
|||
if (strpos($console_str, '登录成功') === false) { // 登录失败 |
|||
// 记录日志 |
|||
$str_log = date('Y-m-d H:i:s')."|登录失败|".$user."|运行时间:".$run_time_str; |
|||
file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND); |
|||
|
|||
}else{ |
|||
// 记录日志 |
|||
$str_log = date('Y-m-d H:i:s')."|登录成功|".$user."|运行时间:".$run_time_str; |
|||
file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND); |
|||
// 推送cookie到正式服务器 |
|||
} |
|||
system("pkill -9 chrome"); |
|||
} |
|||
} |
|||
sleep(5); |
|||
// 删除锁文件 |
|||
unlink($lock_file); |
|||
|
|||
|
|||
}catch(Exception $e){ |
|||
$str_log = date('Y-m-d H:i:s')."|异常退出|异常信息:".$e->getMessage(); |
|||
file_put_contents($log_file, $str_log . PHP_EOL, FILE_APPEND); |
|||
// 删除锁文件 |
|||
unlink($lock_file); |
|||
} |
|||
@ -0,0 +1,190 @@ |
|||
<?php |
|||
|
|||
class mCrossCheck { |
|||
|
|||
public $cookie_path = ''; |
|||
public $loginfo = ''; |
|||
/** |
|||
* 获取crosscheck账号密码 |
|||
* @return array|bool |
|||
*/ |
|||
public function getCrossCheckAccount(){ |
|||
$ch = curl_init(); |
|||
$domain = 'api.kuailelunwen.com'; |
|||
$ip = '101.37.99.56'; |
|||
|
|||
$params = array( |
|||
'_uid' => '345d65ddcd3df70d', |
|||
'_token' => '6965268557309513', |
|||
'type' => '60', |
|||
); |
|||
// 快乐论文左侧导航“开放平台”添加请求IP白名单8.154.43.224 |
|||
|
|||
// 设置要访问的URL |
|||
curl_setopt($ch, CURLOPT_URL, "http://{$domain}/get_turnitin_account"); |
|||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); |
|||
|
|||
// 设置CURLOPT_RESOLVE参数 |
|||
// 格式:域名:端口:IP地址 |
|||
//curl_setopt($ch, CURLOPT_RESOLVE, ["{$domain}:443:{$ip}"]); |
|||
curl_setopt($ch, CURLOPT_RESOLVE, ["{$domain}:80:{$ip}"]); |
|||
// HTTPS相关设置 |
|||
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); |
|||
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 正常验证主机名 |
|||
// 传get参数 |
|||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|||
curl_setopt($ch, CURLOPT_POST, true); |
|||
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); |
|||
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|||
|
|||
// 如果需要设置SNI(服务器名称指示) |
|||
curl_setopt($ch, CURLOPT_SSLKEY, "{$domain}"); |
|||
|
|||
// 执行请求 |
|||
$response = curl_exec($ch); |
|||
print_r($response); |
|||
if (curl_errno($ch)) { |
|||
//echo 'cURL错误: ' . curl_error($ch); |
|||
return false; |
|||
} else { |
|||
// $info = curl_getinfo($ch); |
|||
// echo "实际连接IP: " . $info['primary_ip'] . "\n"; |
|||
// echo "HTTP状态码: " . $info['http_code'] . "\n"; |
|||
$res = json_decode($response, true); |
|||
if (!$res['status']) return false; |
|||
$list = $res['data']; |
|||
return $list; |
|||
} |
|||
|
|||
curl_close($ch); |
|||
} |
|||
|
|||
/** |
|||
* 检查crosscheck账号cookie是否有效 |
|||
* @return bool |
|||
*/ |
|||
public function islogin() { |
|||
$curl_headers = [ |
|||
'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', |
|||
'accept-language: zh-CN,zh;q=0.9,ar;q=0.8', |
|||
'cache-control: max-age=0', |
|||
'priority: u=0, i', |
|||
'sec-ch-ua: "Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', |
|||
'sec-ch-ua-mobile: ?0', |
|||
'sec-ch-ua-platform: "Windows"', |
|||
'sec-fetch-dest: document', |
|||
'sec-fetch-mode: navigate', |
|||
'sec-fetch-site: none', |
|||
'sec-fetch-user: ?1', |
|||
'upgrade-insecure-requests: 1', |
|||
'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36' |
|||
]; |
|||
$url = 'https://external-production.au.turnitin.com/sms-namespace/sms/sms-serviceName/admin-console-server/sessions'; |
|||
$jsonres = $this->requestUrlGet($url,[],$curl_headers); |
|||
// {"success":false,"status":401,"reason":"Failed to provide authorization token","message":"AdminException.AdminException"} |
|||
// {"success":true} |
|||
//var_dump($jsonres); |
|||
$res = json_decode($jsonres, true); |
|||
//print_r($res); |
|||
if ($res['success'] != true) return false; |
|||
|
|||
return true; |
|||
} |
|||
|
|||
|
|||
|
|||
/** |
|||
* curl GET 请求 |
|||
* @param string $url |
|||
* @param array $data |
|||
* @param array $headers |
|||
* @param number $timeout |
|||
*/ |
|||
private function requestUrlGet($url, $data=array(), $headers=array(), $timeout=100) { |
|||
$ch = curl_init(); |
|||
|
|||
curl_setopt($ch, CURLOPT_URL, $url); |
|||
curl_setopt($ch, CURLOPT_POST, false); |
|||
|
|||
$ssl = substr($url, 0, 8) == 'https://' ? true : false; |
|||
if ($ssl) { |
|||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 |
|||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 |
|||
} |
|||
|
|||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|||
curl_setopt($ch, CURLOPT_REFERER, $url); |
|||
|
|||
curl_setopt($ch, CURLOPT_HEADER, false); |
|||
if(!empty($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); |
|||
|
|||
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_path); |
|||
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_path); |
|||
|
|||
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|||
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); |
|||
|
|||
$result = curl_exec($ch); |
|||
curl_close($ch); |
|||
|
|||
if ($result !== false) return $result; |
|||
|
|||
return false; |
|||
} |
|||
|
|||
/** |
|||
* curl POST请求 |
|||
* @param string $url |
|||
* @param array $data |
|||
* @param array $headers |
|||
* @param number $timeout |
|||
*/ |
|||
private function requestUrlPost($url, $data, $headers=array(), $timeout=300) { |
|||
$ch = curl_init(); |
|||
|
|||
curl_setopt($ch, CURLOPT_URL, $url); |
|||
curl_setopt($ch, CURLOPT_POST, true); |
|||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); |
|||
|
|||
$ssl = substr($url, 0, 8) == 'https://' ? true : false; |
|||
if ($ssl) { |
|||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查 |
|||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 |
|||
} |
|||
|
|||
//if($this->part_cookie) curl_setopt($ch, CURLOPT_COOKIE, $this->part_cookie); |
|||
if ($this->cookie_path) { |
|||
curl_setopt($ch, CURLOPT_COOKIEFILE, $this->cookie_path); |
|||
curl_setopt($ch, CURLOPT_COOKIEJAR, $this->cookie_path); |
|||
} |
|||
|
|||
curl_setopt($ch, CURLOPT_HEADER, true); |
|||
if(!empty($headers)) curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); |
|||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
|||
curl_setopt($ch, CURLOPT_REFERER, $url); |
|||
|
|||
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); |
|||
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 100); |
|||
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); |
|||
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); |
|||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); |
|||
curl_setopt($ch, CURLOPT_AUTOREFERER, true); |
|||
|
|||
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); |
|||
|
|||
//curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); |
|||
curl_setopt($ch, CURLOPT_NOBODY, false); |
|||
$result = curl_exec($ch); |
|||
curl_close($ch); |
|||
|
|||
if (file_exists($this->cookie_path)) { |
|||
chown($this->cookie_path, 'nobody'); |
|||
chgrp($this->cookie_path, 'nobody'); |
|||
} |
|||
|
|||
if ($result !== false) return $result; |
|||
|
|||
return false; |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue