· 9 years ago · Jun 30, 2017, 08:42 AM
1<?php
2 header("Content-Type: text/plain;"); //Мы будем выводить проÑтой текÑÑ‚
3 set_time_limit(0); //Скрипт должен работать поÑтоÑнно
4 ob_implicit_flush(); //Ð’Ñе echo должны Ñразу же отправлÑтьÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñƒ
5 date_default_timezone_set('Europe/Moscow'); //УÑтанавливаем чаÑовой поÑÑ ÐœÐ¾Ñквы
6
7 $key = "5IR0OmGhAGABEZOV"; //Ключ дешифровки запроÑов клиента
8 $key1 = "PAzGaNiCzQzERcux"; //Ключ шифровки запроÑов к клиенту
9
10 $address = ""; //Ðйпи текущего Ñервера
11 $port = 32222; //Порт на котором будет работать Ñервер
12
13 $db_address = "localhost"; //Ðйпи базы данных MySQL
14 $db_port = "3306"; //Порт базы данных MySQL
15 $db_user = "root"; //Пользователь базы данных MySQL
16 $db_pass = "m2sngBXK1zs3QVWG"; //Пароль базы данных MySQL
17 $db_database = "hcs"; //Ð˜Ð¼Ñ Ð±Ð°Ð·Ñ‹ данных
18
19 if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
20 //AF_INET - ÑемейÑтво протоколов
21 //SOCK_STREAM - тип Ñокета
22 //SOL_TCP - протокол
23 echo1("Ошибка ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñокета", 1);
24 } else {
25 echo1("Сокет Ñоздан", 1);
26 }
27
28 //СвÑзываем деÑкриптор Ñокета Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ð¼ адреÑом и портом
29 if(($ret = socket_bind($sock, $address, $port)) < 0) {
30 echo1("Ошибка ÑвÑзи Ñокета Ñ Ð°Ð´Ñ€ÐµÑом и портом", 1);
31 } else {
32 echo1("Сокет уÑпешно ÑвÑзан Ñ Ð°Ð´Ñ€ÐµÑом и портом", 1);
33 }
34
35 //Ðачинаем проÑлушивание Ñокета (макÑимум 500 одновременных Ñоединений)
36 if(($ret = socket_listen($sock, 500)) < 0) {
37 echo1("Ошибка при попытке проÑлушивании Ñокета", 1);
38 } else {
39 echo1("Ждём подключение клиента", 1);
40 }
41
42 //ПодключаемÑÑ Ðº базе данных
43 try {
44 $db = new PDO("mysql:host=$db_address;port=$db_port;dbname=$db_database", $db_user, $db_pass);
45 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
46 $db->exec("set names utf8");
47 } catch(PDOException $pe) {
48 echo1("Ошибка Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº базе данных (ХоÑÑ‚, Логин, Пароль)", 1);
49 die();
50 }
51 //Создаём таблицу в базе данных еÑли её нет
52 try {
53 $stmt = $db->prepare("
54 CREATE TABLE IF NOT EXISTS `$db_database`.`keys` (
55 `key` VARCHAR(32) NULL DEFAULT NULL,
56 `hwid` VARCHAR(174) NULL DEFAULT NULL,
57 `dateStart` VARCHAR(8) NULL DEFAULT NULL,
58 `dateEnd` VARCHAR(8) NULL DEFAULT NULL,
59 `timeStart` VARCHAR(8) NULL DEFAULT NULL,
60 `timeEnd` VARCHAR(8) NULL DEFAULT NULL
61 ) ENGINE = InnoDB DEFAULT CHARSET=utf8;");
62 $stmt->execute();
63 } catch(PDOException $pe) {
64 echo1($pe, 1);
65 }
66
67 do {
68 //Принимаем Ñоединение Ñ Ñокетом
69 if(($msgsock = socket_accept($sock)) < 0) {
70 echo1("Ошибка при Ñтарте Ñоединений Ñ Ñокетом", 1);
71 } else {
72 echo1("Сокет готов к приёму Ñообщений", 1);
73 }
74
75 echo1("Сообщение от клиента: ", 2);
76 if(($buf = socket_read($msgsock, 1024)) === false) {
77 echo1("Ошибка при чтении ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ клиента", 3);
78 socket_close($msgsock); //Закрываем Ñоединение
79 continue;
80 } else {
81 echo1($buf, 3); //Сообщение от клиента
82 }
83
84 if(strlen($buf) > 200 || strlen($buf) < 300) {
85 $msg = openssl_decrypt($buf, "aes-128-ecb", $key); //Сообщение клиенту
86 echo1("Сообщение от Ñервера: ".$msg, 1);
87 } else {
88 $msg = "BadHWID"; //Сообщение клиенту
89 echo1("ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð´Ð»Ð¸Ð½Ð½Ð° ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ (".strlen($buf).")", 1);
90 }
91
92 socket_write($msgsock, $msg, strlen($msg)); //ЗапиÑÑŒ в Ñокет
93 socket_close($msgsock); //Закрываем Ñоединение
94 } while(true);
95
96 //ОÑтанавливаем работу Ñ Ñокетом
97 if(isset($sock)) {
98 socket_close($sock);
99 echo1("Сокет уÑпешно закрыт", 1);
100 }
101
102 function md5Lol($l) {
103 $l1 = "";
104 for($i = 16; $i < 32; $i++) {
105 $l1 = $l1.$l{$i};
106 }
107 for($i = 0; $i < 16; $i++) {
108 $l1 = $l1.$l{$i};
109 }
110 return $l1;
111 }
112
113 function echo1($e, $type) {
114 switch($type) {
115 case 2:
116 echo date("\[d.m.y\] \[H:i:s\] ").$e; //С временем без переноÑа Ñтроки
117 break;
118 case 3:
119 echo $e."\n"; //С переноÑом Ñтроки без даты
120 break;
121 default:
122 echo date("\[d.m.y\] \[H:i:s\] ").$e."\n"; //С временем и переноÑом Ñтроки
123 }
124 }
125?>