-
Notifications
You must be signed in to change notification settings - Fork 5
/
cs16_proxy_server.cpp
341 lines (280 loc) · 24.2 KB
/
cs16_proxy_server.cpp
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
#include <iostream>
#include <sys/socket.h>
#include <netinet/ip.h>
#include <arpa/inet.h>
#include <string.h>
#include <vector>
#include <thread>
#include <unistd.h>
#include <fstream>
using namespace std;
#define CLIENTS_SIZE 999
#define PLAYERINFO_LIMIT 5
#define PLAYERINFO_MAXLEN 686
struct sockaddr_in server;
int serversock;
int evidenta;
char playerinfo[][PLAYERINFO_MAXLEN+1] = { // lazy thing. if it works, i don't see a problem
"\xFF\xFF\xFF\xFF\x44\x1F\x01\x42\x61\x78\x61\x36\x75\x54\x00\x1D\x00\x00\x00\x00\x00\xD5\x44\x02\x46\x61\x2E\x51\x3E\x4C\x61\x73\x74\x53\x68\x6F\x74\x69\x6E\x48\x65\x61\x64\x3A\x44\x00\x14\x00\x00\x00\x00\xA0\xD5\x44\x03\x4B\x50\x4F\x42\x41\x42\x62\x49\x75\x27\x59\x72\x41\x50\x00\x13\x00\x00\x00\x00\x80\xA0\x44\x04\x68\x33\x61\x4C\x00\x0A\x00\x00\x00\x00\xE0\x9E\x44\x05\x4C\x31\x6E\x65\x4C\x00\x11\x00\x00\x00\x00\xE0\xBB\x44\x06\x72\x6F\x6B\x61\x00\x09\x00\x00\x00\x00\x60\xDB\x44\x07\x65\x6E\x7A\x4F\x4F\x4F\x4F\x4F\x4F\x4F\x4F\x4F\x4F\x2A\x3F\x21\x00\x36\x00\x00\x00\x00\xC0\xB8\x44\x08\x2D\x3D\x50\x73\x79\x53\x69\x64\x65\x3D\x2D\x00\x02\x00\x00\x00\x00\x20\xD7\x44\x09\x53\x69\x4D\x70\x6C\x65\x5E\x70\x72\x4F\x5E\x6B\x6F\x4C\x69\x6E\x78\x44\x00\x09\x00\x00\x00\x00\x20\xD0\x44\x0A\x54\x41\x55\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x52\x00\x11\x00\x00\x00\x00\xC0\xA5\x44\x0B\x67\x61\x6E\x67\x00\x05\x00\x00\x00\x00\xA0\xD0\x44\x0C\x54\x68\x65\x46\x47\x3E\x6E\x70\x75\x7A\x7A\x70\x61\x6B\x6B\x00\x21\x00\x00\x00\x00\xC0\xA7\x44\x0D\x62\x65\x6E\x6E\x79\x62\x6C\x61\x6E\x63\x63\x6F\x00\x2A\x00\x00\x00\x00\xE0\xDF\x44\x0E\x49\x60\x6D\x6E\x6F\x74\x70\x72\x6F\x29\x60\x00\x31\x00\x00\x00\x00\x20\xC0\x44\x0F\x4B\x61\x4D\x70\x6F\x54\x00\x09\x00\x00\x00\x00\x00\xC9\x44\x10\x53\x6E\x4F\x4F\x70\x00\x36\x00\x00\x00\x00\xA0\xC5\x44\x11\x6D\x61\x6C\x6F\x72\x69\x6B\x28\x4E\x2E\x43\x68\x65\x6C\x6E\x79\x29\x35\x39\x6B\x63\x00\x33\x00\x00\x00\x00\x00\xC8\x44\x12\x4C\x53\x44\x2E\x00\x04\x00\x00\x00\x00\x20\xD6\x44\x13\x41\x6C\x65\x78\x00\x22\x00\x00\x00\x00\x00\xDD\x44\x14\x73\x32\x2E\x41\x6C\x65\x6B\x73\x61\x6E\x64\x72\x4B\x61\x6C\x61\x73\x68\x6E\x69\x6B\x6F\x76\x00\x28\x00\x00\x00\x00\x80\xAD\x44\x15\x64\x61\x6E\x69\x6C\x00\x27\x00\x00\x00\x00\x60\xD6\x44\x16\x59\x72\x65\x63\x00\x1D\x00\x00\x00\x00\x00\xAA\x44\x17\x34\x40\x43\x4F\x42\x4C\x4C\x4C\x2C\x55\x4B\x00\x0E\x00\x00\x00\x00\x00\xDD\x44\x18\x36\x6F\x65\x75\x2C\x2D\x36\x65\x33\x72\x4A\x49\x61\x33\x61\x00\x22\x00\x00\x00\x00\x80\xA6\x44\x19\x53\x69\x4D\x70\x6C\x65\x5E\x70\x72\x4F\x5E\x43\x6E\x75\x70\x6D\x78\x44\x00\x26\x00\x00\x00\x00\x60\xA1\x44\x1A\x43\x65\x6C\x33\x61\x6A\x61\x6C\x67\x6F\x76\x6E\x6F\x6E\x6F\x6B\x61\x33\x61\x6C\x00\x38\x00\x00\x00\x00\xC0\xC3\x44\x1B\x46\x61\x2E\x51\x3E\x56\x75\x65\x62\x79\x7A\x61\x73\x65\x6D\x6B\x69\x6E\x61\x78\x79\x75\x21\x21\x21\x00\x3C\x00\x00\x00\x00\x60\xAB\x44\x1C\x4B\x6F\x4D\x4D\x79\x48\x75\x63\x54\x00\x02\x00\x00\x00\x00\x20\xD9\x44\x1D\x6B\x69\x70\x69\x73\x68\x00\x2B\x00\x00\x00\x00\x40\xAC\x44\x1E\x6B\x69\x6C\x69\x6B\x61\x00\x34\x00\x00\x00\x00\x80\xD4\x44\x1F\x48\x79\x6F\x6B\x6B\x61\x61\x6A\x61\x00\x2A\x00\x00\x00\x00\x80\xB8\x44",
"\xFF\xFF\xFF\xFF\x44\x1F\x00\x5B\x50\x4F\x44\x20\x42\x4F\x54\x5D\x4D\x59\x53\x54\x45\x52\x5F\x53\x45\x52\x47\x2A\x2A\x2A\x00\x01\x00\x00\x00\x44\x61\xAF\x43\x01\x2A\x2A\x2A\x20\x73\x75\x62\x61\x72\x75\x20\x2A\x2A\x2A\x00\x00\x00\x00\x00\xC6\xD1\xA1\x45\x02\xD0\xB7\xD1\x83\xD0\xB1\xD1\x8B\x00\x05\x00\x00\x00\x86\x75\xAB\x43\x03\x2A\x50\x75\x6E\x63\x68\x65\x72\x2A\x00\x07\x00\x00\x00\x07\x8E\xAE\x43\x04\x6D\x63\x41\x4C\x4D\x41\x5A\x49\x4B\x00\x01\x00\x00\x00\x6B\x60\xAF\x43\x05\x4E\x6F\x72\x6D\x61\x6C\x65\x76\x61\x00\x00\x00\x00\x00\x8C\xF5\xFE\x42\x06\x4C\x4F\x51\x4B\x49\x4E\x47\x00\x05\x00\x00\x00\x93\xAF\xAB\x43\x07\x42\x4C\x52\x20\x7C\x20\x53\x54\x4F\x50\x20\x47\x55\x59\x53\x20\x7C\x20\x4B\x4F\x54\x54\x21\x20\x53\x48\x4F\x57\x00\x09\x00\x00\x00\x9C\x4A\xB0\x43\x08\x24\xD0\xB2\xD0\xB8\x24\x54\x00\x04\x00\x00\x00\x13\x3A\xAE\x43\x09\x57\x41\x53\x59\x41\x00\x04\x00\x00\x00\x65\x45\xB0\x43\x0A\x5B\x4D\x79\x4D\x2A\x41\x6C\x66\x61\x5D\x3C\x52\x6F\x42\x73\x4E\x3E\x5B\x52\x47\x5D\x00\x07\x00\x00\x00\x83\x6E\xB0\x43\x0B\x6F\x6E\x6C\x79\x00\x01\x00\x00\x00\x08\xE4\xAD\x43\x0C\x4E\x69\x6B\x6F\x6C\x61\x69\x34\x00\x06\x00\x00\x00\xF6\xDF\x3E\x45\x0D\x43\x55\x42\x41\x00\x00\x00\x00\x00\x26\xFF\xAE\x43\x0E\x52\x6F\x4D\x65\x4F\x5F\x44\x6F\x4C\x7D\x7C\x7B\x45\x4E\x5F\x55\x6D\x45\x52\x65\x54\x62\x00\x05\x00\x00\x00\xFA\xC4\x9D\x44\x0F\x6B\x69\x74\x61\x65\x63\x20\x2D\x2E\x2D\x00\x09\x00\x00\x00\xE3\x11\xA1\x45\x10\x47\x4F\x47\x41\x2D\x42\x45\x4C\x41\x52\x55\x53\x00\x01\x00\x00\x00\xE9\x59\xB0\x43\x11\x2A\x2A\x2A\x44\x72\x61\x67\x6F\x2A\x2A\x2A\x00\x00\x00\x00\x00\xDD\xBA\x5E\x42\x12\xD0\xA0\xD0\x90\xD0\x97\xD0\x94\xD0\x90\xD0\xAE\xD0\xA9\xD0\x98\xD0\x99\x20\xD0\x9F\xD0\x98\xD0\x97\xD0\x94\xD0\xAB\x00\x00\x00\x00\x00\xDC\xE7\x94\x44\x13\x4E\x4F\x52\x44\x49\x4B\x7B\x48\x65\x61\x64\x73\x68\x6F\x54\x7D\x00\x02\x00\x00\x00\xC0\xD9\x07\x45\x14\x48\x4C\x4F\x50\x43\x48\x49\x4B\x2E\x73\x70\x62\x2A\x00\x04\x00\x00\x00\xEE\xA7\x41\x44\x15\x41\x52\x44\x41\x4D\x45\x48\x52\x00\x00\x00\x00\x00\x16\x80\x99\x40\x16\x44\x65\x6B\x61\x72\x7A\x00\x00\x00\x00\x00\xA6\x18\xE0\x41\x17\x43\x53\x54\x20\x7C\x20\x78\x58\x78\x00\x02\x00\x00\x00\x22\x5B\xA4\x43\x18\x4F\x43\x45\x41\x4E\x00\x06\x00\x00\x00\x7A\xF5\x3D\x45\x19\x4D\x65\x72\x73\x69\x00\x04\x00\x00\x00\x13\x76\xAF\x43\x1A\x75\x6C\x74\x72\x61\x6D\x65\x67\x61\x6B\x72\x75\x74\x2E\x00\x0C\x00\x00\x00\x8D\x3E\xB0\x43\x1B\x43\x68\x65\x66\x00\x00\x00\x00\x00\x81\x4A\x88\x45\x1C\x4D\x6F\x6C\x6F\x64\x6F\x69\x00\x00\x00\x00\x00\x1B\x90\x05\x45\x1D\x46\x61\x7A\x00\x06\x00\x00\x00\x5E\xA5\xAF\x43\x1E\x63\x6F\x75\x6E\x74\x69\x6E\x67\x62\x61\x62\x6F\x73\x79\x00\x09\x00\x00\x00\xC4\x51\x88\x45",
"\xFF\xFF\xFF\xFF\x44\x1F\x01\x4D\x69\x73\x69\x65\x6B\x3B\x44\x00\x0C\x00\x00\x00\x00\x00\xB1\x43\x02\x44\x69\x5A\x7A\x59\x7C\x7C\x52\x6F\x53\x63\x4F\x00\x1B\x00\x00\x00\x00\x40\x2B\x44\x03\x41\x5A\x00\x3B\x00\x00\x00\x00\x00\xC2\x43\x04\x43\x68\x69\x74\x65\x72\x73\x6C\x37\x75\x67\x6F\x70\x61\x63\x62\x6C\x00\x2B\x00\x00\x00\x00\x80\xC9\x43\x05\x55\x6C\x74\x72\x61\x56\x6F\x6D\x69\x74\x00\x0D\x00\x00\x00\x00\x00\x41\x43\x06\x50\x4F\x78\x21\x00\x21\x00\x00\x00\x00\x80\xEE\x43\x07\x73\x77\x41\x4E\x00\x05\x00\x00\x00\x00\x00\x47\x43\x08\x5E\x72\x6F\x7A\x64\x75\x70\x6E\x69\x6B\x5E\x00\x1F\x00\x00\x00\x00\x80\xA7\x43\x09\x4C\x27\x41\x73\x73\x61\x73\x73\x69\x6E\x00\x0B\x00\x00\x00\x00\x00\x50\x43\x0A\x5B\x5A\x46\x43\x5D\x4C\x6F\x70\x61\x63\x00\x3C\x00\x00\x00\x00\x00\x5D\x43\x0B\x48\x65\x72\x6F\x69\x73\x6D\x00\x0D\x00\x00\x00\x00\x00\x84\x43\x0C\x4B\x65\x6C\x6C\x79\x27\x73\x45\x79\x65\x00\x15\x00\x00\x00\x00\x00\xBE\x43\x0D\x72\x75\x6D\x6D\x61\x6E\x39\x36\x00\x12\x00\x00\x00\x00\x00\x07\x44\x0E\x62\x65\x64\x62\x6F\x79\x73\x00\x13\x00\x00\x00\x00\x00\xB8\x43\x0F\x4E\x4F\x4E\x41\x4D\x45\x00\x37\x00\x00\x00\x00\x40\x17\x44\x10\x6D\x6F\x68\x62\x61\x79\x6F\x75\x00\x05\x00\x00\x00\x00\x00\x03\x43\x11\x27\x2D\x5F\x2D\x5F\x2D\x5F\x2E\x3A\x3A\x53\x5E\x5F\x5E\x53\x3A\x3A\x2E\x5F\x2D\x5F\x2D\x5F\x2D\x27\x00\x01\x00\x00\x00\x00\x00\x82\x43\x12\x62\x6F\x7A\x6B\x75\x72\x74\x6B\x69\x6C\x6C\x65\x72\x00\x15\x00\x00\x00\x00\xC0\x17\x44\x13\x62\x61\x6D\x62\x75\x6B\x00\x10\x00\x00\x00\x00\x80\x96\x43\x14\x62\x6B\x77\x2E\x43\x4E\x7C\x53\x63\x6F\x54\x74\x2E\x63\x4E\x00\x1A\x00\x00\x00\x00\x40\x1B\x44\x15\x41\x59\x4D\x45\x4E\x2A\x4E\x50\x00\x25\x00\x00\x00\x00\x80\x83\x43\x16\x47\x65\x74\x61\x4E\x49\x63\x6B\x6E\x61\x6D\x65\x00\x0A\x00\x00\x00\x00\xC0\x0C\x44\x17\x58\x65\x71\x54\x00\x38\x00\x00\x00\x00\x00\x54\x43\x18\x46\x43\x55\x46\x41\x00\x33\x00\x00\x00\x00\x80\x88\x43\x19\x50\x6C\x61\x79\x65\x72\x00\x07\x00\x00\x00\x00\x00\x85\x43\x1A\x6D\x61\x6C\x69\x6E\x61\x00\x31\x00\x00\x00\x00\x80\x87\x43\x1B\x74\x68\x65\x43\x72\x61\x7A\x79\x42\x41\x53\x74\x61\x72\x44\x00\x07\x00\x00\x00\x00\x80\xEA\x43\x1C\x53\x33\x40\x4E\x21\x24\x7C\x29\x40\x4E\x30\x30\x38\x32\x30\x4D\x38\x69\x33\x00\x10\x00\x00\x00\x00\x00\x09\x43\x1D\x70\x65\x6F\x70\x31\x65\x00\x19\x00\x00\x00\x00\x00\xAD\x43\x1E\x4D\x2E\x61\x67\x79\x61\x72\x45\x6D\x62\x65\x72\x00\x04\x00\x00\x00\x00\x00\x81\x43\x1F\x45\x70\x69\x63\x4C\x4F\x4C\x3F\x21\x00\x0D\x00\x00\x00\x00\xC0\x1E\x44",
"\xFF\xFF\xFF\xFF\x44\x1F\x00\x4B\x6F\x63\x69\x20\x4F\x64\x62\x79\x74\x00\x12\x00\x00\x00\xD4\x7D\xAA\x44\x01\x57\x55\x4A\x45\x4B\x20\x53\x41\x4D\x4F\x20\x5A\x4C\x4F\x00\x0B\x00\x00\x00\x29\xB6\xCF\x45\x02\x50\x61\x6E\x63\x65\x72\x4C\x69\x73\x00\x03\x00\x00\x00\xC5\xCE\x83\x45\x03\x59\x73\x7A\x74\x79\x00\x01\x00\x00\x00\x2A\xAC\x47\x43\x04\x44\x4F\x24\x54\x4F\x4A\x4E\x59\x20\x4B\x4F\x43\x55\x52\x00\x07\x00\x00\x00\x32\x3B\x67\x44\x05\x4D\x6F\x6E\x69\x6B\x61\x00\x10\x00\x00\x00\x48\x95\x7E\x44\x06\x42\x61\x6C\x69\x6B\x00\x0C\x00\x00\x00\x02\xF4\x0D\x45\x07\x55\x5A\x55\x4D\x59\x4D\x57\x00\x04\x00\x00\x00\x79\xB5\x77\x44\x08\x6D\x69\x6B\x65\x6C\x39\x39\x33\x00\x09\x00\x00\x00\xF9\xFE\xAD\x44\x09\x5B\x20\x46\x47\x20\x5D\x20\x4B\x75\x70\x20\x56\x2E\x49\x2E\x50\x21\x20\x57\x70\x69\x73\x7A\x20\x2F\x76\x69\x70\x00\x00\x00\x00\x00\x20\x7B\xA8\x46\x0A\x65\x66\x66\x6F\x00\x1A\x00\x00\x00\xD1\xD1\xEB\x44\x0B\x4B\x41\x50\x55\x43\x48\x41\x00\x03\x00\x00\x00\x26\xEE\x23\x45\x0C\x49\x4E\x46\x49\x4C\x49\x47\x41\x54\x49\x4F\x4E\x45\x46\x49\x4C\x41\x54\x49\x4F\x4E\x45\x46\x49\x55\x4C\x49\x47\x41\x54\x00\x16\x00\x00\x00\x44\x40\x74\x44\x0D\x4B\x75\x74\x69\x00\x0B\x00\x00\x00\xDE\x0E\x6B\x44\x0E\x4E\x65\x76\x61\x64\x61\x00\x09\x00\x00\x00\x8C\x3A\x72\x44\x0F\x24\x72\x65\x64\x6E\x69\x00\x17\x00\x00\x00\xEA\xDB\x6C\x45\x10\x6D\x61\x72\x73\x68\x6D\x61\x6C\x6C\x6F\x77\x20\x67\x65\x6E\x74\x65\x6C\x6D\x61\x6E\x00\x1C\x00\x00\x00\x41\x5D\xCD\x44\x11\x6D\x75\x6C\x74\x69\x70\x6C\x61\x79\x65\x72\x00\x05\x00\x00\x00\x0F\xCF\x2C\x45\x12\x54\x77\x61\x72\x64\x79\x00\x07\x00\x00\x00\x42\xA5\x28\x44\x13\x50\x75\x73\x7A\x65\x6B\x00\x08\x00\x00\x00\xEC\xA2\x81\x45\x14\x44\x61\x77\x69\x64\x00\x01\x00\x00\x00\x53\xD8\x3E\x43\x15\x4D\x75\x73\x69\x6F\x6C\x65\x4B\x20\x27\x00\x0D\x00\x00\x00\xCB\x99\xCC\x44\x16\x42\x21\x24\x54\x79\x00\x00\x00\x00\x00\x42\xFD\xF2\x42\x17\x48\x65\x54\x79\x73\x7A\x20\x69\x73\x20\x62\x61\x63\x6B\x20\x3B\x2F\x00\x14\x00\x00\x00\xE1\xD4\x84\x45\x18\x45\x42\x55\x73\x00\x04\x00\x00\x00\x6B\xEB\x46\x44\x19\x44\x65\x61\x74\x68\x53\x74\x72\x6F\x6B\x65\x2E\x00\x12\x00\x00\x00\xA9\x42\x44\x44\x1A\x44\x4F\x42\x45\x52\x45\x4B\x00\x09\x00\x00\x00\x7A\xED\x65\x45\x1B\x6F\x20\x6B\x75\x72\x63\x7A\x65\x20\x6F\x20\x6B\x75\x72\x64\x65\x00\x00\x00\x00\x00\x1A\x25\x5F\x42",
"\xFF\xFF\xFF\xFF\x44\x1F\x00\x34\x52\x42\x33\x52\x00\x00\x00\x00\x00\xAB\xA6\x21\x44\x01\x48\x61\x70\x70\x79\x44\x61\x6E\x69\x65\x6C\x00\x01\x00\x00\x00\x22\xB1\x7C\x46\x02\x50\x6F\x77\x65\x72\x20\x62\x79\x20\x43\x53\x47\x4F\x4C\x43\x53\x2E\x52\x4F\x20\x28\x53\x41\x29\x00\x00\x00\x00\x00\xF2\x63\x1F\x48\x03\x48\x61\x6E\x7A\x6F\x20\x48\x61\x73\x61\x73\x68\x69\x00\x00\x00\x00\x00\x6B\x0C\x0A\x46\x04\x44\x79\x73\x6F\x6E\x5E\x5F\x5E\x00\x03\x00\x00\x00\xB3\x90\xAA\x44\x05\x50\x6F\x77\x65\x72\x20\x62\x79\x20\x43\x53\x47\x4F\x4C\x43\x53\x2E\x52\x4F\x20\x2D\x20\x45\x51\x00\x00\x00\x00\x00\xF2\x63\x1F\x48\x06\x2A\x43\x72\x59\x2A\x00\x00\x00\x00\x00\xDD\x52\x54\x44\x07\x41\x52\x42\x20\x20\x40\x79\x6F\x75\x62\x3D\x29\x00\x00\x00\x00\x00\x4C\x2C\x0F\x43\x08\x2E\x3A\x52\x40\x7A\x56\x40\x6E\x3A\x2E\x00\x03\x00\x00\x00\x8E\xEF\xD2\x43\x09\x5A\x59\x41\x44\x33\x34\x35\x35\x00\x00\x00\x00\x00\x96\xC8\x23\x45\x0A\x50\x6F\x77\x65\x72\x20\x62\x79\x20\x43\x53\x47\x4F\x4C\x43\x53\x2E\x52\x4F\x20\x28\x4C\x57\x29\x00\x00\x00\x00\x00\xF2\x63\x1F\x48\x0B\x74\x68\x65\x64\x61\x72\x6B\x69\x74\x73\x65\x6C\x66\x3A\x44\x00\x00\x00\x00\x00\x14\xA6\xFE\x44\x0C\x4A\x31\x64\x30\x00\x03\x00\x00\x00\x6F\x60\x0E\x45\x0D\x6A\x45\x6B\x6F\x20\x40\x00\x02\x00\x00\x00\x3D\x1C\x05\x44\x0E\x44\x20\x49\x20\x4F\x20\x52\x00\x00\x00\x00\x00\xF9\x97\xA5\x42\x0F\x52\x75\x73\x6E\x61\x6B\x00\x01\x00\x00\x00\x0D\xB9\x35\x45\x10\x73\x68\x6D\x31\x74\x5A\x20\x78\x20\x6C\x65\x67\x65\x6E\x64\x61\x72\x6F\x00\x00\x00\x00\x00\x4D\x67\xB7\x44\x11\x5B\x2D\x2D\x3E\x41\x72\x6F\x67\x61\x6E\x74\x61\x3C\x2D\x2D\x5D\x00\x00\x00\x00\x00\xD7\x58\x13\x43\x12\x41\x6C\x65\x78\x32\x30\x30\x33\x00\x04\x00\x00\x00\xB7\x60\xCD\x44\x13\x53\x45\x54\x42\x20\x7C\x20\x50\x49\x50\x49\x54\x4F\x00\x00\x00\x00\x00\x49\xDA\x26\x44\x14\x56\x69\x72\x67\x69\x6C\x00\x00\x00\x00\x00\x17\x12\xF3\x43\x15\x53\x61\x69\x4D\x65\x4E\x5F\x5F\x00\x00\x00\x00\x00\x92\x0D\x59\x43\x16\x5F\x2D\x6E\x33\x76\x33\x72\x4D\x21\x6E\x64\x2D\x5F\x00\x00\x00\x00\x00\x65\x2C\x37\x43\x17\x4A\x61\x78\x69\x20\x54\x56\x00\x06\x00\x00\x00\x72\xD5\x0B\x45\x18\x53\x61\x6C\x6C\x79\x00\x02\x00\x00\x00\x6B\x29\x12\x43\x19\x68\x75\x69\x6E\x69\x61\x00\x00\x00\x00\x00\xAD\x8F\xC6\x44\x1A\x49\x52\x49\x00\x01\x00\x00\x00\xE1\x1F\xFB\x42\x1B\x76\x79\x70\x65\x72\x00\x00\x00\x00\x00\x1F\x52\xA6\x44\x1C\x45\x6C\x33\x6D\x33\x6E\x54\x5E\x5F\x5E\x00\x00\x00\x00\x00\xA9\xF1\xA3\x43",
"\xFF\xFF\xFF\xFF\x44\x1F\x00\x42\x75\x70\x79\x63\x00\x31\x00\x00\x00\xEE\x18\x27\x45\x01\x68\x61\x6E\x74\x65\x72\x00\x0F\x00\x00\x00\xB2\x8D\xB9\x43\x02\x4D\x75\x68\x61\x6D\x6D\x61\x64\x61\x6C\x69\x00\x08\x00\x00\x00\xAD\x20\xB5\x43\x03\xD0\xBF\xD0\xB0\xD0\xBB\xD0\xB0\xD1\x87\x00\x06\x00\x00\x00\x31\x4A\x5A\x43\x04\x47\x53\x2D\x4D\x20\x7C\x20\x4B\x69\x4C\x4C\x65\x72\x00\x0F\x00\x00\x00\x92\x3B\x69\x44\x05\x6D\x61\x6B\x68\x6D\x75\x64\x6F\x66\x66\x5F\x30\x31\x00\x40\x00\x00\x00\xB0\xA0\xA4\x44\x06\x62\x6F\x74\x00\x10\x00\x00\x00\x10\x7B\x85\x44\x07\x3C\x3C\x4D\x6F\x6E\x73\x74\x65\x72\x3E\x3E\xD0\xA7\xD1\x83\xD0\xBF\xD0\xB0\x2D\xD0\xA7\xD1\x83\xD0\xBF\x00\x21\x00\x00\x00\x5F\x63\x4A\x44\x08\x5B\x76\x69\x70\x6D\x73\x2D\x62\x6F\x6F\x73\x74\x5D\x20\x7C\x20\x50\x6C\x61\x79\x65\x72\x00\x4C\x00\x00\x00\xA2\x88\xEE\x44\x09\x44\x65\x6E\x63\x68\x69\x6B\x00\x00\x00\x00\x00\xB0\x15\x78\x41\x0A\x50\x72\x65\x70\x6F\x64\x61\x76\x61\x74\x65\x6C\x2F\x55\x43\x54\x4F\x50\x55\x55\x2E\x53\x50\x42\x00\x20\x00\x00\x00\x8D\xAE\x4D\x45\x0B\x6B\x69\x6C\x6F\x6D\x65\x74\x72\x31\x00\x20\x00\x00\x00\xE8\x67\xA3\x44\x0C\x73\x50\x61\x4E\x67\x45\x20\x42\x6F\x42\x00\x5E\x00\x00\x00\xD1\x8D\x3E\x45\x0D\x52\x49\x4C\x4C\x45\x52\x00\x77\x00\x00\x00\x43\xF6\x0B\x45\x0E\xD0\x9C\xD0\xB0\xD1\x81\xD1\x81\xD0\xB0\xD0\xB6\xD0\xB8\xD1\x81\xD1\x82\xD0\xBA\xD0\xB0\x00\x50\x00\x00\x00\x29\x63\xA5\x44\x0F\x53\xD0\xB8\x46\x79\x7A\x00\x24\x00\x00\x00\x70\xBA\x1F\x45\x10\xD0\xA3\xD1\x82\xD0\xB8\xD0\x9F\xD1\x83\xD1\x82\xD0\xB8\xD1\x88\xD0\xBA\xD0\xB0\x00\x0F\x00\x00\x00\x17\x9F\x2D\x45\x11\x40\x56\x45\x4E\x4F\x4D\x40\x00\x04\x00\x00\x00\x7F\x04\x52\x43\x12\x61\x66\x67\x68\x61\x6E\x2E\x75\x7A\x00\x12\x00\x00\x00\xF5\xC7\xA4\x44\x13\x42\x61\x67\x73\x00\x1D\x00\x00\x00\x8B\x3A\x76\x44\x14\x66\x76\x6F\x72\x6F\x6E\x00\x24\x00\x00\x00\xAD\x7A\xA5\x44\x15\x53\x48\x41\x4B\x48\x00\x1A\x00\x00\x00\x0F\x01\xA5\x44\x16\x5F\x5F\x5F\x4B\x5F\x4F\x5F\x43\x5F\x4D\x5F\x4F\x5F\x43\x5F\x5F\x5F\x00\x0E\x00\x00\x00\x3F\x6E\x01\x44\x17\xD1\x80\xD0\xB8\x34\x34\xD0\xB8\x34\x34\x34\xD0\xB8\x34\xD0\xB8\x34\xD0\xB8\x34\xD0\xB8\x00\x2C\x00\x00\x00\x3F\x3B\xA1\x44\x18\x53\x65\x72\x67\x00\x31\x00\x00\x00\x19\x3E\x9C\x44\x19\xD0\xA1\xD0\x92\xD0\x90\xD0\xA0\xD0\xA9\xD0\x98\xD0\x9A\x00\x14\x00\x00\x00\x9E\xDF\xA4\x44\x1A\x70\x61\x74\x72\x69\x6F\x74\x00\x01\x00\x00\x00\x7E\x73\xA9\x42\x1B\x4A\x6F\x20\x4A\x6F\x00\x2F\x00\x00\x00\x96\x01\xA5\x44\x1C\xD0\xBC\xD1\x84\xD1\x8C\xD0\xB7\xD1\x88\xD1\x8F\xD0\xB2\xD1\x84\x00\x05\x00\x00\x00\xAF\xFE\x12\x43\x1D\x36\x36\x36\x00\x11\x00\x00\x00\xF9\xB3\x4D\x45\x1E\x73\x6F\x6B\x72\x75\x73\x68\x69\x74\x65\x6C\x00\x28\x00\x00\x00\xA6\x71\x70\x44\x1F\xD0\x94\xD0\x95\xD0\x94\x20\xD0\x9C\xD0\x9E\xD0\x9F\xD0\x95\xD0\x94\x00\x26\x00\x00\x00\x7B\xAF\x6A\x44"
};
int playerinfo_id = 0;
char hostnames[255][128];
char maps[27][16];
char ips[32][128];
int hostname_len, maps_len;
int hostname_id, maps_id;
int ips_len = 0, port_len = 0;
int currip, currport;
int port[32];
int newp[32];
struct clientinfo
{
struct sockaddr_in client;
struct sockaddr_in fwdserver;
struct timeval tv;
unsigned int fwdserver_len;
unsigned int bufferlen;
unsigned char buffer[2048];
int fwdip; int fwdport;
int sock = socket(AF_INET, SOCK_DGRAM, 0);
clientinfo()
{
client.sin_addr.s_addr = 1;
client.sin_port = 1;
}
void Setup()
{
fwdserver.sin_family = AF_INET;
if(currip > ips_len-1) currip = 0;
if(currport > port_len-1) currport = 0;
fwdip = inet_addr(ips[currip++]);
fwdport = port[currport++];
fwdserver.sin_addr.s_addr = inet_addr("redirect-server-ip");
fwdserver.sin_port = htons(redirect-server-port);
tv.tv_sec = 5.0; // timeout for recvfrom from ThreadForClient function
tv.tv_usec = 0;
}
void HostnameChange(char type)
{
bufferlen = 0;
if(type == 'I')
{
char static_buff[] = "\x00\x63\x73\x74\x72\x69\x6B\x65\x00\x7C\x46\x52\x45\x45\x20\x56\x49\x50\x7C\x00\x0A\x00\x1F\x20\x00\x64\x6C\x00\x01\x31\x2E\x31\x2E\x32\x2E\x37\x2F\x53\x74\x64\x69\x6F\x00";
int static_buff_len = 44;
char start_buff[] = "\xff\xff\xff\xffI0"; // {0xff, 0xff, 0xff, 0xff, 0xff, 'I', 'O'};
char sep[] = {"\x00"};
if(hostname_id > hostname_len)
{
hostname_id = 0;
}
if(maps_id > maps_len)
{
maps_id = 0;
}
bzero(&buffer, sizeof(buffer));
concat(start_buff);
concat(hostnames[hostname_id++]);
concat(sep, 1);
concat(maps[maps_id++]);
concat(static_buff, static_buff_len);
bufferlen--;
}
else
if(type == 'm')
{
char start_buff[] = "\xff\xff\xff\xff\x6d\x30\x2E\x30\x2E\x30\x2E\x30\x3A\x32\x37\x30\x31\x35"; //xFFxFFxFFxFFm0.0.0.0:27015
char static_buff[] = "\x63\x73\x74\x72\x69\x6B\x65\x00\x50\x61\x69\x6E\x74\x62\x61\x6C\x6C\x20\x4D\x6F\x64\x00\x1F\x20\x2F\x64\x6C\x00\x00\x01\x00";
char sep[] = {"\x00"};
int static_buff_l = 31;
if(hostname_id > hostname_len)
{
hostname_id = 0;
}
if(maps_id > maps_len)
{
maps_id = 0;
}
bzero(&buffer, sizeof(buffer));
concat(start_buff);
concat(sep, 1);
concat(hostnames[hostname_id++]);
concat(sep, 1);
concat(maps[maps_id++]);
concat(sep, 1);
concat(static_buff, static_buff_l);
bufferlen--;
}
}
void PlayersInfo()
{
bzero(&buffer, sizeof(buffer));
if(playerinfo_id > PLAYERINFO_LIMIT)
{
playerinfo_id = 0;
}
bufferlen = 0;
concat(playerinfo[playerinfo_id++], PLAYERINFO_MAXLEN);
}
void concat(char a[], int size = 0)
{
if(size == 0)
size = strlen(a);
for(int i = 0; i < size; i++)
{
buffer[bufferlen++] = a[i];
}
}
} clients[CLIENTS_SIZE];
void ThreadForClient(int id)
{
while(1)
{
if((clients[id].bufferlen = recvfrom(clients[id].sock, clients[id].buffer, sizeof(clients[id].buffer), 0, (struct sockaddr *)&clients[id].fwdserver, &clients[id].fwdserver_len)))
{
if(clients[id].bufferlen == -1)
{
clients[id].client.sin_addr.s_addr = 1;
clients[id].client.sin_port = 1;
break;
}
if(clients[id].buffer[0] == 0xFF && clients[id].buffer[1] == 0xFF && clients[id].buffer[2] == 0xFF && clients[id].buffer[3] == 0xFF && clients[id].buffer[4] == 'I')
{
clients[id].HostnameChange(clients[id].buffer[4]);
}
else
{
if(clients[id].buffer[0] == 0xFF && clients[id].buffer[1] == 0xFF && clients[id].buffer[2] == 0xFF && clients[id].buffer[3] == 0xFF && clients[id].buffer[4] == 'm')
{
clients[id].HostnameChange(clients[id].buffer[4]);
}
}
if(clients[id].buffer[0] == 0xFF && clients[id].buffer[1] == 0xFF && clients[id].buffer[2] == 0xFF && clients[id].buffer[3] == 0xFF && clients[id].buffer[4] == 'D')
{
clients[id].PlayersInfo();
}
sendto(serversock, clients[id].buffer, clients[id].bufferlen, 0, (struct sockaddr *)&clients[id].client, clients[id].fwdserver_len);
}
}
}
int main(int argvn, char *argv[])
{
if(argvn < 2)
{
cout << "Error: Wrong parameters." << endl;
return -1;
}
cout << "Port: " << argv[1] << endl << "Max clients per port: " << CLIENTS_SIZE << endl;
fstream host("config//hostnames.txt"), map("config//maps.txt"), ipsf("config//ips.txt");
char portc[8];
string line;
while(getline(host, line))
{
strcpy(hostnames[hostname_len++], line.c_str());
}
while(getline(map, line))
{
strcpy(maps[maps_len++], line.c_str());
}
while(getline(ipsf, line))
{
strcpy(ips[ips_len++], line.c_str());
getline(ipsf, line);
strcpy(portc, line.c_str());
for(int i = 0; i < strlen(portc); i++)
{
port[port_len] = port[port_len] + portc[i]-'0';
port[port_len] *= 10;
}
port[port_len++] /= 10;
}
host.close();
map.close();
hostname_len--; maps_len--;
int porta = atoi(argv[1]);
int clientsid = 0;
struct sockaddr_in client;
if((serversock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
cout << "Error. \n\t Cause of the error: Cannot create socket." << endl;
return -1;
}
bzero(&server, sizeof(server));
server.sin_family = AF_INET;
server.sin_addr.s_addr = inet_addr("0.0.0.0");
server.sin_port = htons(porta);
if(bind(serversock, (sockaddr *)&server, sizeof(server)) == -1)
{
cout << "Error. \n\t Cause of the error: Cannot bind to the socket." << endl;
return -1;
}
unsigned char buffer[2048];
int bufferlen;
unsigned clientlen;
int clientn = 0;
while(1)
{
if(bufferlen = recvfrom(serversock, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &clientlen))
{
clientsid = 0;
while(clientsid < CLIENTS_SIZE)
{
if(clients[clientsid].client.sin_addr.s_addr == client.sin_addr.s_addr &&
clients[clientsid].client.sin_port == client.sin_port)
{
break;
}
else
{
clientsid++;
}
}
if(clientsid == CLIENTS_SIZE)
{
clientsid = 0;
while(clientsid < CLIENTS_SIZE)
{
if(clients[clientsid].client.sin_addr.s_addr == 1 && clients[clientsid].client.sin_port == 1)
{
break;
}
else
{
clientsid++;
}
}
}
if(clients[clientsid].client.sin_addr.s_addr != client.sin_addr.s_addr)
{
if(buffer[4] == 'g' && buffer[5] == 'e')
{
char evidentafile[] = "evidenta/";
char port[4];
strcpy(port, argv[1]);
strcat(evidentafile, port);
ofstream f(evidentafile);
clientn++;
f << clientn;
f.close();
}
clients[clientsid].client = client;
clients[clientsid].bufferlen = bufferlen;
clients[clientsid].Setup();
setsockopt(clients[clientsid].sock, SOL_SOCKET, SO_RCVTIMEO, (const char*)&clients[clientsid].tv, sizeof(clients[clientsid].tv));
bind(clients[clientsid].sock, (sockaddr *)&clients[clientsid].client, sizeof(clients[clientsid].client));
memcpy(clients[clientsid].buffer, buffer, bufferlen);
thread(ThreadForClient, clientsid).detach();
sendto(clients[clientsid].sock, buffer, bufferlen, 0, (struct sockaddr *)&clients[clientsid].fwdserver, (unsigned int)sizeof(sockaddr));
}
else
{
sendto(clients[clientsid].sock, buffer, bufferlen, 0, (struct sockaddr *)&clients[clientsid].fwdserver, (unsigned int)sizeof(sockaddr));
}
}
}
return 0;
}