diff --git a/das/composer.json b/das/composer.json new file mode 100644 index 0000000..13d102c --- /dev/null +++ b/das/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "monolog/monolog": "^3.5" + } +} diff --git a/das/helpers.php b/das/helpers.php new file mode 100644 index 0000000..d6c567e --- /dev/null +++ b/das/helpers.php @@ -0,0 +1,42 @@ +setFormatter($consoleFormatter); + $log->pushHandler($consoleHandler); + + // Set up the file handler + $fileHandler = new RotatingFileHandler($logFilePath, 0, Logger::DEBUG); + $fileFormatter = new LineFormatter( + "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n", + "Y-m-d H:i:s.u" // Date format + ); + $fileHandler->setFormatter($fileFormatter); + $log->pushHandler($fileHandler); + + return $log; +} \ No newline at end of file diff --git a/das/start_das.php b/das/start_das.php index 0bf9cf3..9811177 100644 --- a/das/start_das.php +++ b/das/start_das.php @@ -4,18 +4,22 @@ if (!extension_loaded('swoole')) { die('Swoole extension must be installed'); } +require_once 'helpers.php'; +$logFilePath = '/var/log/namingo/das.log'; +$log = setupLogger($logFilePath, 'DAS'); + // Create a Swoole TCP server $server = new Swoole\Server('0.0.0.0', 1043); $server->set([ 'daemonize' => false, - 'log_file' => '/var/log/namingo/das.log', + 'log_file' => '/var/log/namingo/das_application.log', 'log_level' => SWOOLE_LOG_INFO, 'worker_num' => swoole_cpu_num() * 2, 'pid_file' => '/var/run/das.pid', 'max_request' => 1000, 'dispatch_mode' => 2, 'open_tcp_nodelay' => true, - 'max_conn' => 10000, + 'max_conn' => 1024, 'heartbeat_check_interval' => 60, 'heartbeat_idle_time' => 120, 'buffer_output_size' => 2 * 1024 * 1024, // 2MB @@ -24,6 +28,7 @@ $server->set([ 'open_eof_check' => true, 'package_eof' => "\r\n" ]); +$log->info('server started.'); // Connect to the database try { @@ -31,17 +36,18 @@ try { $pdo = new PDO("{$c['db_type']}:host={$c['db_host']};dbname={$c['db_database']}", $c['db_username'], $c['db_password']); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); $server->send($fd, "Error connecting to database"); $server->close($fd); } // Register a callback to handle incoming connections -$server->on('connect', function ($server, $fd) { - echo "Client connected: {$fd}\r\n"; +$server->on('connect', function ($server, $fd) use ($log) { + $log->info('new client connected: ' . $fd); }); // Register a callback to handle incoming requests -$server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) { +$server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo, $log) { // Validate and sanitize the domain name $domain = trim($data); @@ -74,7 +80,7 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) $server->close($fd); return; } - + // Check if domain is reserved $stmtReserved = $pdo->prepare("SELECT id FROM reserved_domain_names WHERE name = ? LIMIT 1"); $stmtReserved->execute([$parts[0]]); @@ -115,33 +121,26 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) if ($f = $stmt->fetch(PDO::FETCH_ASSOC)) { $server->send($fd, "1"); - if ($fp = @fopen("/var/log/das/das_request.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $domain . "\n"); - fclose($fp); - } + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $domain . ' | FOUND'); $server->close($fd); } else { $server->send($fd, "0"); - if ($fp = @fopen("/var/log/das/das_not_found.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $domain . "\n"); - fclose($fp); - } + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $domain . ' | NOT FOUND'); $server->close($fd); } } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); $server->send($fd, "Error connecting to the das database"); $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } // Close the connection @@ -149,8 +148,8 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) }); // Register a callback to handle client disconnections -$server->on('close', function ($server, $fd) { - echo "Client disconnected: {$fd}\r\n"; +$server->on('close', function ($server, $fd) use ($log) { + $log->info('client ' . $fd . ' connected.'); }); // Start the server diff --git a/whois/port43/composer.json b/whois/port43/composer.json new file mode 100644 index 0000000..13d102c --- /dev/null +++ b/whois/port43/composer.json @@ -0,0 +1,5 @@ +{ + "require": { + "monolog/monolog": "^3.5" + } +} diff --git a/whois/port43/helpers.php b/whois/port43/helpers.php new file mode 100644 index 0000000..d6c567e --- /dev/null +++ b/whois/port43/helpers.php @@ -0,0 +1,42 @@ +setFormatter($consoleFormatter); + $log->pushHandler($consoleHandler); + + // Set up the file handler + $fileHandler = new RotatingFileHandler($logFilePath, 0, Logger::DEBUG); + $fileFormatter = new LineFormatter( + "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n", + "Y-m-d H:i:s.u" // Date format + ); + $fileHandler->setFormatter($fileFormatter); + $log->pushHandler($fileHandler); + + return $log; +} \ No newline at end of file diff --git a/whois/port43/start_whois.php b/whois/port43/start_whois.php index 986bce9..ecadcd9 100644 --- a/whois/port43/start_whois.php +++ b/whois/port43/start_whois.php @@ -4,18 +4,22 @@ if (!extension_loaded('swoole')) { die('Swoole extension must be installed'); } +require_once 'helpers.php'; +$logFilePath = '/var/log/namingo/whois.log'; +$log = setupLogger($logFilePath, 'WHOIS'); + // Create a Swoole TCP server $server = new Swoole\Server('0.0.0.0', 43); $server->set([ 'daemonize' => false, - 'log_file' => '/var/log/namingo/whois.log', + 'log_file' => '/var/log/namingo/whois_application.log', 'log_level' => SWOOLE_LOG_INFO, 'worker_num' => swoole_cpu_num() * 2, 'pid_file' => '/var/run/whois.pid', 'max_request' => 1000, 'dispatch_mode' => 2, 'open_tcp_nodelay' => true, - 'max_conn' => 10000, + 'max_conn' => 1024, 'heartbeat_check_interval' => 60, 'heartbeat_idle_time' => 120, 'buffer_output_size' => 2 * 1024 * 1024, // 2MB @@ -24,6 +28,7 @@ $server->set([ 'open_eof_check' => true, 'package_eof' => "\r\n" ]); +$log->info('server started.'); // Connect to the database try { @@ -31,17 +36,18 @@ try { $pdo = new PDO("{$c['db_type']}:host={$c['db_host']};dbname={$c['db_database']}", $c['db_username'], $c['db_password']); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); $server->send($fd, "Error connecting to database"); $server->close($fd); } // Register a callback to handle incoming connections -$server->on('connect', function ($server, $fd) { - echo "Client connected: {$fd}\r\n"; +$server->on('connect', function ($server, $fd) use ($log) { + $log->info('new client connected: ' . $fd); }); // Register a callback to handle incoming requests -$server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) { +$server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo, $log) { $privacy = $c['privacy']; // Validate and sanitize the data @@ -133,36 +139,61 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) ."\nyou agree to abide by this policy." ."\n"; $server->send($fd, $res . ""); - - if ($fp = @fopen("/var/log/whois/whois_request.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $nameserver . "\n"); - fclose($fp); + + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $nameserver . ' | FOUND'); + + try { + $stmt = $pdo->prepare("UPDATE settings SET value = value + 1 WHERE name = :name"); + $settingName = 'whois-43-queries'; + $stmt->bindParam(':name', $settingName); + $stmt->execute(); + } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); + $server->send($fd, "Error connecting to the whois database"); + $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } + $server->close($fd); } else { //NOT FOUND or No match for; $server->send($fd, "NOT FOUND"); - - if ($fp = @fopen("/var/log/whois/whois_not_found.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $nameserver . "\n"); - fclose($fp); + + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $nameserver . ' | NOT FOUND'); + + try { + $stmt = $pdo->prepare("UPDATE settings SET value = value + 1 WHERE name = :name"); + $settingName = 'whois-43-queries'; + $stmt->bindParam(':name', $settingName); + $stmt->execute(); + } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); + $server->send($fd, "Error connecting to the whois database"); + $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } + $server->close($fd); } } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); $server->send($fd, "Error connecting to the whois database"); $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } } @@ -241,36 +272,61 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) ."\nyou agree to abide by this policy." ."\n"; $server->send($fd, $res . ""); - - if ($fp = @fopen("/var/log/whois/whois_request.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $registrar . "\n"); - fclose($fp); + + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $registrar . ' | FOUND'); + + try { + $stmt = $pdo->prepare("UPDATE settings SET value = value + 1 WHERE name = :name"); + $settingName = 'whois-43-queries'; + $stmt->bindParam(':name', $settingName); + $stmt->execute(); + } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); + $server->send($fd, "Error connecting to the whois database"); + $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } + $server->close($fd); } else { //NOT FOUND or No match for; $server->send($fd, "NOT FOUND"); - - if ($fp = @fopen("/var/log/whois/whois_not_found.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $registrar . "\n"); - fclose($fp); + + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $registrar . ' | NOT FOUND'); + + try { + $stmt = $pdo->prepare("UPDATE settings SET value = value + 1 WHERE name = :name"); + $settingName = 'whois-43-queries'; + $stmt->bindParam(':name', $settingName); + $stmt->execute(); + } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); + $server->send($fd, "Error connecting to the whois database"); + $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } + $server->close($fd); } } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); $server->send($fd, "Error connecting to the whois database"); $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } } @@ -587,35 +643,60 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) ."\nyou agree to abide by this policy." ."\n"; $server->send($fd, $res . ""); - - if ($fp = @fopen("/var/log/whois/whois_request.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $domain . "\n"); - fclose($fp); + + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $domain . ' | FOUND'); + + try { + $stmt = $pdo->prepare("UPDATE settings SET value = value + 1 WHERE name = :name"); + $settingName = 'whois-43-queries'; + $stmt->bindParam(':name', $settingName); + $stmt->execute(); + } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); + $server->send($fd, "Error connecting to the whois database"); + $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } + $server->close($fd); } else { //NOT FOUND or No match for; $server->send($fd, "NOT FOUND"); - - if ($fp = @fopen("/var/log/whois/whois_not_found.log",'a')) { - $clientInfo = $server->getClientInfo($fd); - $remoteAddr = $clientInfo['remote_ip']; - $currentDateTime = new DateTime(); - $milliseconds = $currentDateTime->format("v"); - $timestampWithMilliseconds = $currentDateTime->format("Y-m-d H:i:s") . '.' . $milliseconds; - fwrite($fp, $timestampWithMilliseconds . "\t-\t" . $remoteAddr . "\t-\t" . $domain . "\n"); - fclose($fp); + + $clientInfo = $server->getClientInfo($fd); + $remoteAddr = $clientInfo['remote_ip']; + $log->notice('new request from ' . $remoteAddr . ' | ' . $domain . ' | NOT FOUND'); + + try { + $stmt = $pdo->prepare("UPDATE settings SET value = value + 1 WHERE name = :name"); + $settingName = 'whois-43-queries'; + $stmt->bindParam(':name', $settingName); + $stmt->execute(); + } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); + $server->send($fd, "Error connecting to the whois database"); + $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } + $server->close($fd); } } catch (PDOException $e) { + $log->error('DB Connection failed: ' . $e->getMessage()); $server->send($fd, "Error connecting to the whois database"); $server->close($fd); + } catch (Throwable $e) { + $log->error('Error: ' . $e->getMessage()); + $server->send($fd, "General error"); + $server->close($fd); } } @@ -624,8 +705,8 @@ $server->on('receive', function ($server, $fd, $reactorId, $data) use ($c, $pdo) }); // Register a callback to handle client disconnections -$server->on('close', function ($server, $fd) { - echo "Client disconnected: {$fd}\r\n"; +$server->on('close', function ($server, $fd) use ($log) { + $log->info('client ' . $fd . ' connected.'); }); // Start the server