GIF89a;
Priv8 Uploader By InMyMine7
Linux server.abcbiz.in 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
<?php
/**
* Description of Bitninja
*
* @author Joseph Easy
*/
class Bitninja
{
private static function _buildLogFilesArray()
{
$logFiles = array(
'error.log',
'main.log',
);
$moduleLogFiles = scandir("/var/log/bitninja/");
foreach ($moduleLogFiles as $key => $logFile) {
if (!preg_match('/^mod\..*\.log$/', $logFile)) {
unset($moduleLogFiles[$key]);
}
}
$logFiles = array_merge($logFiles, array_values($moduleLogFiles));
$array = array();
foreach ($logFiles as $logFile) {
$array[] = array(
'filename' => $logFile,
'lines' => exec("sed -n '$=' /var/log/bitninja/$logFile"),
'modified' => filemtime("/var/log/bitninja/$logFile")
);
}
return $array;
}
private static function _sortLogFiles($fileLogsArray, $sortBy)
{
$modified = array();
foreach ($fileLogsArray as $key => $row) {
$modified[$key] = $row['modified'];
}
array_multisort($modified, $sortBy, $fileLogsArray);
return $fileLogsArray;
}
private static function _searchLogInArray($array, $filename)
{
foreach ($array as $key => $item) {
if ($item['filename'] == $filename) {
return $key;
}
}
}
public static function getAndBuildLogs($isFirstRun, $prevLogFilesData = array())
{
$LogFilesData = self::_buildLogFilesArray();
$logs = array();
if ($isFirstRun) {
$logFilesData = self::_sortLogFiles($LogFilesData, SORT_DESC);
$diffTime = strtotime("-5 minute");
foreach ($logFilesData as $data) {
if ($data['modified'] >= $diffTime) {
exec('tail /var/log/bitninja/' . $data['filename'] . ' -n 3', $lines);
$logs = array_merge($lines, $logs);
} else {
break;
}
}
$logsReverse = ($logs);
$logs = array();
foreach ($logsReverse as $log) {
$separatedLogs = explode('\n', $log);
$logs = array_merge($separatedLogs, $logs);
}
} else {
$logFilesData = self::_sortLogFiles($LogFilesData, SORT_ASC);
foreach ($logFilesData as $data) {
$key = self::_searchLogInArray($prevLogFilesData, $data['filename']);
if ($prevLogFilesData[$key]['lines'] < $data['lines']) {
$diffLines = $data['lines'] - $prevLogFilesData[$key]['lines'];
exec('tail /var/log/bitninja/' . $data['filename'] . ' -n ' . $diffLines, $lines);
$logs = array_merge($lines, $logs);
}
}
}
return json_encode(array('logs' => $logs, 'logFilesDatas' => $logFilesData));
}
public static function getVersion()
{
$version = exec('rpm -q bitninja');
$version = explode('-', $version);
return $version[1];
}
public static function isRun()
{
$output = [];
exec('/bin/ps cax | /bin/grep bitninja', $output);
foreach ($output as $line) {
if (preg_match('/\sbitninja\s*$/', $line)) {
return true;
}
}
return false;
}
public static function start()
{
exec('service bitninja start');
}
public static function stop()
{
exec('service bitninja stop');
}
public static function getLicenseInfo()
{
$output = shell_exec("bitninjacli --licenseinfo | grep info | grep -oE '[^ ]+$' | xargs");
$output = preg_replace('/.*\[.*\] - \|.*\| ([a-z_]+)/', '$1', $output);
$output = str_replace('_', ' ', $output);
$output = ucfirst($output);
return $output;
}
public static function checkGL($ip)
{
$response = [];
$ip = trim($ip);
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
$response['success'] = false;
$response['message'] = 'The IP address is invalid!';
return json_encode($response);
}
$output = exec("bitninjacli --greylist --check=$ip | sed -r 's/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g'");
$output = preg_replace('/.*\[.*\] - \|.*\| (.*).*/', '$1', $output);
$response['success'] = true;
$response['message'] = $output;
return json_encode($response);
}
}