├── .gitattributes
├── .gitignore
├── .htaccess
├── 3wifi.php
├── 3wifi.sql
├── 3wifid.php
├── 404.html
├── LICENSE
├── README.md
├── add_quadkeys.php
├── api
├── .htaccess
└── ajax.php
├── apidoc.html
├── config.php-distr
├── counter.txt
├── css
└── style.css
├── db.php
├── devmac.html
├── devmac.php
├── dlink_seq.php
├── faq.html
├── favicon.ico
├── find.html
├── geoext.php
├── graph.html
├── home.html
├── img
├── add.png
├── find.png
├── icon-fav-off.png
├── icon-fav-on.png
├── icon-hidden.png
├── icon-ip.png
├── icon-location.png
├── icon-map.png
├── icon-nowifi.png
├── icon-warning.png
├── loading.gif
├── loadsm.gif
├── logo.png
├── map.png
├── no.png
├── ok.png
├── rickroll.gif
├── search.png
├── stat.png
└── warning.png
├── import.free.php
├── index.html
├── index.php
├── ipext.php
├── js
├── FileSaver.min.js
├── jquery-2.1.4.min.js
├── jquery.flot.categories.min.js
├── jquery.flot.min.js
└── jquery.flot.resize.js
├── l10n
├── .htaccess
├── en-US.php
├── en.php
├── ru-RU.php
└── ru.php
├── map.html
├── project_news.json
├── quadkey.php
├── ranges.html
├── robots.txt
├── rules.html
├── service_news.json
├── stat.html
├── statext.php
├── themes
├── .htaccess
└── antichat
│ ├── img
│ ├── ajax.gif
│ ├── bg.gif
│ ├── logo.gif
│ ├── menu_off.gif
│ ├── menu_on.gif
│ ├── rac.png
│ ├── raz.gif
│ └── shbg.gif
│ ├── style.css
│ └── theme.php
├── upload.html
├── uploads
└── .htaccess
├── user.class.php
├── user.html
├── user.php
├── utils.php
├── win_login.html
├── win_newpass.html
├── win_reg.html
├── win_wait.html
├── wpspin.html
└── wpspin.php
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Конфиг
2 | /config.php
3 |
4 | # Загрузки, кроме .htaccess
5 | /uploads/*
6 | !/uploads/.htaccess
7 |
8 | # Счетчик
9 | /counter.txt
10 |
11 | # Лог отладки
12 | /Debug.log
13 |
14 | # Среда разработки
15 | /.idea/*
16 |
17 | # SypexDumper
18 | /sxd/*
19 |
--------------------------------------------------------------------------------
/.htaccess:
--------------------------------------------------------------------------------
1 | Options -Indexes
2 |
3 | RewriteEngine on
4 |
5 | # Redirect legacy pages
6 | RewriteRule left.html index.php?redir=home [NC,L,QSA]
7 | RewriteRule main.html index.php?redir=home [NC,L,QSA]
8 | RewriteRule devicemac.html index.php?redir=devmac [NC,L,QSA]
9 | RewriteRule ^(['_A-Za-z]+).html index.php?redir=$1 [NC,L,QSA]
10 | RewriteRule ^(map[0-9]*+).php index.php?redir=map [NC,L,QSA]
11 | RewriteRule find_ranges.php index.php?redir=ranges [NC,L,QSA]
12 |
13 | # Rewrite for simple URIs
14 | RewriteRule home$ index.php?page=home [NC,L,QSA]
15 | RewriteRule rules$ index.php?page=rules [NC,L,QSA]
16 | RewriteRule faq$ index.php?page=faq [NC,L,QSA]
17 | RewriteRule apidoc$ index.php?page=apidoc [NC,L,QSA]
18 | RewriteRule map$ index.php?page=map [NC,L,QSA]
19 | RewriteRule find$ index.php?page=find [NC,L,QSA]
20 | RewriteRule ranges$ index.php?page=ranges [NC,L,QSA]
21 | RewriteRule devmac$ index.php?page=devmac [NC,L,QSA]
22 | RewriteRule wpspin$ index.php?page=wpspin [NC,L,QSA]
23 | RewriteRule upload$ index.php?page=upload [NC,L,QSA]
24 | RewriteRule graph$ index.php?page=graph [NC,L,QSA]
25 | RewriteRule stat$ index.php?page=stat [NC,L,QSA]
26 | RewriteRule user$ index.php?page=user [NC,L,QSA]
27 |
28 | # 404 page
29 | ErrorDocument 404 /index.php?page=404
30 |
31 |
32 | AddOutputFilterByType DEFLATE text/html text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript application/json application/json-p
33 |
--------------------------------------------------------------------------------
/3wifi.sql:
--------------------------------------------------------------------------------
1 | -- ------------------------------
2 | -- Структура базы данных 3WiFi --
3 | -- ------------------------------
4 |
5 | -- Дамп структуры базы данных 3wifi
6 | CREATE DATABASE IF NOT EXISTS `3wifi` /*!40100 DEFAULT CHARACTER SET utf8 */;
7 | USE `3wifi`;
8 |
9 | -- Дамп структуры таблицы 3wifi.base
10 | CREATE TABLE `base` (
11 | `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
12 | `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
13 | `cmtid` INT(10) UNSIGNED NULL DEFAULT NULL,
14 | `IP` INT(10) NULL DEFAULT NULL,
15 | `Port` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
16 | `Authorization` TINYTEXT NULL,
17 | `name` TINYTEXT NOT NULL,
18 | `RadioOff` BIT(1) NOT NULL DEFAULT b'0',
19 | `Hidden` BIT(1) NOT NULL DEFAULT b'0',
20 | `NoBSSID` TINYINT(3) UNSIGNED NOT NULL,
21 | `BSSID` BIGINT(15) UNSIGNED NOT NULL,
22 | `ESSID` VARCHAR(32) NOT NULL,
23 | `Security` TINYINT(1) UNSIGNED NOT NULL,
24 | `WiFiKey` VARCHAR(64) NOT NULL,
25 | `WPSPIN` INT(8) UNSIGNED NOT NULL,
26 | `LANIP` INT(10) NULL DEFAULT NULL,
27 | `LANMask` INT(10) NULL DEFAULT NULL,
28 | `WANIP` INT(10) NULL DEFAULT NULL,
29 | `WANMask` INT(10) NULL DEFAULT NULL,
30 | `WANGateway` INT(10) NULL DEFAULT NULL,
31 | `DNS1` INT(10) NULL DEFAULT NULL,
32 | `DNS2` INT(10) NULL DEFAULT NULL,
33 | `DNS3` INT(10) NULL DEFAULT NULL,
34 | PRIMARY KEY (`id`),
35 | INDEX `BSSID` (`BSSID`),
36 | INDEX `ESSID` (`ESSID`),
37 | INDEX `Time` (`time`),
38 | UNIQUE INDEX `WIFI` (`NoBSSID`, `BSSID`, `ESSID`, `WiFiKey`, `WPSPIN`)
39 | ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
40 |
41 | -- Дамп структуры таблицы 3wifi.geo
42 | CREATE TABLE `geo` (
43 | `BSSID` BIGINT(15) UNSIGNED NOT NULL,
44 | `latitude` FLOAT(12,8) NULL DEFAULT NULL,
45 | `longitude` FLOAT(12,8) NULL DEFAULT NULL,
46 | `quadkey` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
47 | PRIMARY KEY (`BSSID`),
48 | INDEX `quadkey` (`quadkey`),
49 | INDEX `latitude` (`latitude`)
50 | ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
51 |
52 | -- Дамп структуры для таблицы 3wifi.invites
53 | CREATE TABLE IF NOT EXISTS `invites` (
54 | `invite` CHAR(12) NOT NULL,
55 | `puid` INT(11) UNSIGNED NOT NULL,
56 | `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
57 | `uid` INT(11) UNSIGNED NULL DEFAULT NULL,
58 | `level` TINYINT(4) NOT NULL DEFAULT '1',
59 | PRIMARY KEY (`invite`)
60 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
61 |
62 | -- Дамп структуры таблицы 3wifi.comments
63 | CREATE TABLE `comments` (
64 | `cmtid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
65 | `cmtval` VARCHAR(127) NOT NULL,
66 | PRIMARY KEY (`cmtid`),
67 | UNIQUE INDEX `comment` (`cmtval`)
68 | ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
69 |
70 | -- Дамп структуры таблицы 3wifi.tasks
71 | CREATE TABLE `tasks` (
72 | `tid` CHAR(32) NOT NULL,
73 | `uid` INT(11) UNSIGNED NULL DEFAULT NULL,
74 | `ipaddr` INT(11) NOT NULL,
75 | `tstate` TINYINT(3) UNSIGNED NOT NULL DEFAULT 0,
76 | `created` TIMESTAMP NOT NULL DEFAULT current_timestamp(),
77 | `modified` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
78 | `ext` CHAR(4) NOT NULL,
79 | `comment` TINYTEXT NOT NULL,
80 | `checkexist` BIT(1) NOT NULL,
81 | `nowait` BIT(1) NOT NULL,
82 | `lines` INT(10) UNSIGNED NOT NULL DEFAULT 0,
83 | `accepted` INT(10) UNSIGNED NOT NULL DEFAULT 0,
84 | `onmap` INT(10) UNSIGNED NOT NULL DEFAULT 0,
85 | `warns` TEXT NULL DEFAULT NULL,
86 | PRIMARY KEY (`tid`),
87 | INDEX `task_state` (`tstate`),
88 | INDEX `created_time` (`created`)
89 | )
90 | COLLATE='utf8_general_ci' ENGINE=InnoDB;
91 |
92 | -- Дамп структуры таблицы 3wifi.ranges
93 | CREATE TABLE `ranges` (
94 | `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
95 | `startIP` INT(10) UNSIGNED NOT NULL,
96 | `endIP` INT(10) UNSIGNED NOT NULL,
97 | `netname` TINYTEXT NOT NULL,
98 | `descr` TINYTEXT NOT NULL,
99 | `country` CHAR(2) NOT NULL,
100 | PRIMARY KEY (`id`),
101 | UNIQUE INDEX `RANGE` (`startIP`, `endIP`)
102 | ) COLLATE='utf8_general_ci' ENGINE=InnoDB;
103 |
104 | -- Дамп структуры таблицы 3wifi.stats
105 | CREATE TABLE `stats` (
106 | `StatId` INT(15) UNSIGNED NOT NULL,
107 | `Value` INT(10) UNSIGNED NOT NULL DEFAULT '0',
108 | `LastUpdate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
109 | PRIMARY KEY (`StatId`)
110 | ) COLLATE='utf8_general_ci' ENGINE=MEMORY;
111 |
112 | -- Дамп структуры таблицы 3wifi.mem_base
113 | CREATE TABLE `mem_base` (
114 | `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
115 | `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
116 | `cmtid` INT(10) UNSIGNED NULL DEFAULT NULL,
117 | `IP` INT(10) NULL DEFAULT NULL,
118 | `Port` SMALLINT(5) UNSIGNED NULL DEFAULT NULL,
119 | `Authorization` VARCHAR(64) NULL DEFAULT NULL,
120 | `name` VARCHAR(64) NOT NULL,
121 | `RadioOff` BIT(1) NOT NULL DEFAULT b'0',
122 | `Hidden` BIT(1) NOT NULL DEFAULT b'0',
123 | `NoBSSID` TINYINT(3) UNSIGNED NOT NULL,
124 | `BSSID` BIGINT(15) UNSIGNED NOT NULL,
125 | `ESSID` VARCHAR(32) NOT NULL,
126 | `Security` TINYINT(1) UNSIGNED NOT NULL,
127 | `WiFiKey` VARCHAR(64) NOT NULL,
128 | `WPSPIN` INT(8) UNSIGNED NOT NULL,
129 | `LANIP` INT(10) NULL DEFAULT NULL,
130 | `LANMask` INT(10) NULL DEFAULT NULL,
131 | `WANIP` INT(10) NULL DEFAULT NULL,
132 | `WANMask` INT(10) NULL DEFAULT NULL,
133 | `WANGateway` INT(10) NULL DEFAULT NULL,
134 | `DNS1` INT(10) NULL DEFAULT NULL,
135 | `DNS2` INT(10) NULL DEFAULT NULL,
136 | `DNS3` INT(10) NULL DEFAULT NULL,
137 | PRIMARY KEY (`id`),
138 | INDEX `BSSID` (`BSSID`),
139 | INDEX `ESSID` (`ESSID`),
140 | INDEX `Time` (`time`),
141 | UNIQUE INDEX `WIFI` (`NoBSSID`, `BSSID`, `ESSID`, `WiFiKey`, `WPSPIN`)
142 | ) COLLATE='utf8_general_ci' ENGINE=MEMORY;
143 |
144 | -- Дамп структуры таблицы 3wifi.mem_geo
145 | CREATE TABLE `mem_geo` (
146 | `BSSID` BIGINT(15) UNSIGNED NOT NULL,
147 | `latitude` FLOAT(12,8) NULL DEFAULT NULL,
148 | `longitude` FLOAT(12,8) NULL DEFAULT NULL,
149 | `quadkey` BIGINT(20) UNSIGNED NULL DEFAULT NULL,
150 | PRIMARY KEY (`BSSID`),
151 | INDEX `quadkey` (`quadkey`),
152 | INDEX `latitude` (`latitude`)
153 | ) COLLATE='utf8_general_ci' ENGINE=MEMORY;
154 |
155 | -- Дамп структуры для таблицы 3wifi.users
156 | CREATE TABLE `users` (
157 | `uid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
158 | `regdate` TIMESTAMP NULL DEFAULT NULL,
159 | `lastupdate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
160 | `puid` INT(11) NOT NULL DEFAULT '0',
161 | `login` VARCHAR(30) NOT NULL,
162 | `nick` VARCHAR(30) NOT NULL,
163 | `pass_hash` CHAR(32) NOT NULL,
164 | `autologin` CHAR(32) NOT NULL,
165 | `salt` CHAR(32) NOT NULL,
166 | `level` TINYINT(4) NOT NULL DEFAULT '0',
167 | `ip_hash` CHAR(32) NOT NULL,
168 | `invites` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
169 | `rapikey` CHAR(32) NULL DEFAULT NULL,
170 | `wapikey` CHAR(32) NULL DEFAULT NULL,
171 | `querytime` TIMESTAMP NULL DEFAULT NULL,
172 | `ban_reason` VARCHAR(16) NULL DEFAULT NULL,
173 | PRIMARY KEY (`uid`),
174 | UNIQUE INDEX `login` (`login`),
175 | UNIQUE INDEX `nick` (`nick`)
176 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
177 |
178 | -- Дамп структуры для таблицы 3wifi.logauth
179 | CREATE TABLE `logauth` (
180 | `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
181 | `timestamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
182 | `IP` INT(15) NOT NULL,
183 | `uid` INT(11) UNSIGNED NULL DEFAULT NULL,
184 | `action` TINYINT(3) UNSIGNED NOT NULL,
185 | `data` CHAR(64) NOT NULL DEFAULT '',
186 | `status` BIT(1) NOT NULL DEFAULT b'0',
187 | PRIMARY KEY (`id`)
188 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
189 |
190 | -- Дамп структуры для таблицы 3wifi.logupload
191 | CREATE TABLE `logupload` (
192 | `id` INT(10) UNSIGNED NOT NULL,
193 | `updated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
194 | `ipaddr` INT(11) NOT NULL,
195 | PRIMARY KEY (`id`),
196 | UNIQUE INDEX `FK1_logupload_base` (`id`),
197 | INDEX `updated` (`updated`),
198 | INDEX `ipaddr` (`ipaddr`),
199 | CONSTRAINT `FK1_logupload_base` FOREIGN KEY (`id`) REFERENCES `base` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
200 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
201 |
202 | -- Дамп структуры для таблицы 3wifi.uploads
203 | CREATE TABLE `uploads` (
204 | `uid` INT(10) UNSIGNED NOT NULL,
205 | `id` INT(10) UNSIGNED NOT NULL,
206 | `creator` BIT(1) NOT NULL DEFAULT b'0',
207 | UNIQUE INDEX `upload` (`uid`, `id`),
208 | INDEX `FK_uploads_base` (`id`),
209 | INDEX `uid` (`uid`),
210 | CONSTRAINT `FK_uploads_users` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`) ON UPDATE CASCADE ON DELETE CASCADE,
211 | CONSTRAINT `FK_uploads_base` FOREIGN KEY (`id`) REFERENCES `base` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
212 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
213 |
214 | -- Дамп структуры для таблицы 3wifi.favorites
215 | CREATE TABLE `favorites` (
216 | `uid` INT(10) UNSIGNED NOT NULL,
217 | `id` INT(10) UNSIGNED NOT NULL,
218 | UNIQUE INDEX `favorite` (`uid`, `id`),
219 | INDEX `FK_favorites_base` (`id`),
220 | INDEX `uid` (`uid`),
221 | CONSTRAINT `FK_favorites_users` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`) ON UPDATE CASCADE ON DELETE CASCADE,
222 | CONSTRAINT `FK_favorites_base` FOREIGN KEY (`id`) REFERENCES `base` (`id`) ON UPDATE CASCADE ON DELETE CASCADE
223 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
224 |
225 | -- Дамп структуры для таблицы 3wifi.locations
226 | CREATE TABLE `locations` (
227 | `uid` INT(10) UNSIGNED NOT NULL,
228 | `latitude` FLOAT(12,8) NOT NULL,
229 | `longitude` FLOAT(12,8) NOT NULL,
230 | `comment` VARCHAR(127) NOT NULL,
231 | UNIQUE INDEX `uniq` (`uid`, `latitude`, `longitude`),
232 | INDEX `uid` (`uid`),
233 | INDEX `coords` (`latitude`, `longitude`),
234 | CONSTRAINT `FK_locations_users` FOREIGN KEY (`uid`) REFERENCES `users` (`uid`) ON UPDATE CASCADE ON DELETE CASCADE
235 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
236 |
237 | -- Дамп данных таблицы 3wifi.users
238 | INSERT INTO `users` SET
239 | `regdate`=CURRENT_TIMESTAMP,
240 | `login`='admin',
241 | `nick`='Administrator',
242 | `salt`='2p8a!m%EFHr).djHO1uuIA^x82X$(988',
243 | `pass_hash`=MD5(CONCAT('admin',`salt`)),
244 | `autologin`='',
245 | `level`=3,
246 | `ip_hash`='',
247 | `invites`=65535;
248 |
249 | -- Дамп структуры для таблицы 3wifi.extinfo
250 | CREATE TABLE `extinfo` (
251 | `id` INT(11) NOT NULL,
252 | `data` VARCHAR(255) NOT NULL,
253 | `sn1` VARCHAR(50) NULL DEFAULT NULL,
254 | `sn2` VARCHAR(50) NULL DEFAULT NULL,
255 | `cable_mac` BIGINT(15) NULL DEFAULT NULL,
256 | PRIMARY KEY (`id`),
257 | INDEX `data_index` (`data`)
258 | ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
259 |
260 | -- Дамп данных процедуры 3wifi.show_graph_stat
261 | CREATE PROCEDURE `show_graph_stat` (
262 | IN `radius` INT
263 | )
264 | LANGUAGE SQL
265 | NOT DETERMINISTIC
266 | CONTAINS SQL
267 | BEGIN
268 | IF radius = 0 THEN
269 | SET @tme = (SELECT `time` FROM base WHERE `time` <= NOW() ORDER BY `time` DESC LIMIT 1);
270 | ELSE
271 | SET @tme = (SELECT `time` FROM base JOIN radius_ids USING(id) WHERE `time` <= NOW() ORDER BY radius_ids.id DESC LIMIT 1);
272 | END IF;
273 | SET @a = 0;
274 |
275 | a_loop:
276 | WHILE @a < 30 DO
277 | IF FOUND_ROWS() = 0 THEN
278 | LEAVE a_loop;
279 | END IF;
280 | IF @a = 0 THEN
281 | IF radius = 0 THEN
282 | CREATE TEMPORARY TABLE IF NOT EXISTS tmp_graph AS (
283 | SELECT DATE_FORMAT(time,'%Y.%m.%d') AS `date`, COUNT(id) AS `count` FROM base
284 | WHERE `time` BETWEEN
285 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 00:00:00') AND
286 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 23:59:59')
287 | );
288 | ELSE
289 | CREATE TEMPORARY TABLE IF NOT EXISTS tmp_graph AS (
290 | SELECT DATE_FORMAT(time,'%Y.%m.%d') AS `date`, COUNT(id) AS `count` FROM base
291 | JOIN radius_ids USING(id)
292 | WHERE `time` BETWEEN
293 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 00:00:00') AND
294 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 23:59:59')
295 | );
296 | END IF;
297 | ELSE
298 | IF radius = 0 THEN
299 | INSERT INTO tmp_graph
300 | SELECT DATE_FORMAT(time,'%Y.%m.%d') AS `date`, COUNT(id) AS `count` FROM base
301 | WHERE `time` BETWEEN
302 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 00:00:00') AND
303 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 23:59:59');
304 | ELSE
305 | INSERT INTO tmp_graph
306 | SELECT DATE_FORMAT(time,'%Y.%m.%d') AS `date`, COUNT(id) AS `count` FROM base
307 | JOIN radius_ids USING(id)
308 | WHERE `time` BETWEEN
309 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 00:00:00') AND
310 | CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 23:59:59');
311 | END IF;
312 | END IF;
313 | SET @a = @a + 1;
314 | IF radius = 0 THEN
315 | SET @tme = (SELECT `time` FROM base WHERE `time` < CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 00:00:00') ORDER BY `time` DESC LIMIT 1);
316 | ELSE
317 | SET @tme = (SELECT `time` FROM base JOIN radius_ids USING(id) WHERE `time` < CONCAT(SUBSTRING_INDEX(@tme, ' ', 1), ' 00:00:00') ORDER BY radius_ids.id DESC LIMIT 1);
318 | END IF;
319 | END WHILE a_loop;
320 |
321 | SELECT * FROM tmp_graph;
322 | DROP TABLE IF EXISTS tmp_graph;
323 | END
324 |
--------------------------------------------------------------------------------
/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
%l10n_msg_404%
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
203 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 3WiFi Database
2 |
3 | (c) 2015-2022 Anton Kokarev et al.
4 |
5 | This project was created to collect data from Router Scan log reports, search for access points, obtain its geolocation coordinates, and display it on world map.
6 |
7 | ## Prerequirements:
8 | 1. Disable display of errors, warnings, and notices in `php.ini`
9 | 1. Make sure your web server is set up to apply .htaccess policies per directory
10 | 1. Make sure you have installed `bcmath`, `curl`, `mysqli`, and `simplexml` php extensions
11 |
12 | ## Installation steps:
13 | 1. Copy all required files to your `/www` directory
14 | 1. Create database (execute `3wifi.sql` to create tables)
15 | 1. Copy config.php-distr to config.php
16 | 1. Edit config.php (DB_SERV, DB_NAME, DB_USER, DB_PASS etc)
17 | 1. (optional) Turn on memory tables (in the `config.php` define `TRY_USE_MEMORY_TABLES` as `true`)
18 | 1. (optional) Use `import.free.php` once to import old format database
19 | 1. Start all background daemons:
20 | ```sh
21 | # Upload routine loads data into database
22 | php -f 3wifid.php uploads
23 | # Finalize routine prepares tasks for finalization
24 | php -f 3wifid.php finalize
25 | # Geolocate routine locates new added BSSIDs on map
26 | php -f 3wifid.php geolocate
27 | # Stats routine caches statistics (use only when stats caching enabled)
28 | php -f 3wifid.php stats
29 | # Memory table manager (use only with memory tables enabled)
30 | php -f 3wifid.php memory
31 | ```
32 |
33 | ## Database maintenance:
34 | ```sh
35 | # Recheck not found BSSIDs in the database
36 | php -f 3wifid.php recheck
37 | ```
38 | Before running the daemons, make sure that `php-cli` interpreter is accessible from your directory.
39 |
--------------------------------------------------------------------------------
/add_quadkeys.php:
--------------------------------------------------------------------------------
1 | query($sql))
22 | {
23 | echo "Failed to alter table $geo_table: ";
24 | echo "(" . $db->errno . ") " . $db->error;
25 | }
26 |
27 | $coord_res = QuerySql(
28 | "SELECT * FROM $geo_table
29 | WHERE `latitude` != 0 AND `longitude` != 0
30 | AND `latitude` IS NOT NULL AND `longitude` IS NOT NULL
31 | AND `quadkey` IS NULL");
32 | if (!$coord_res)
33 | {
34 | echo "Failed to select from $geo_table: ";
35 | echo "(" . $db->errno . ") " . $db->error;
36 | exit();
37 | }
38 | if (!($stmt = $db->prepare("UPDATE $geo_table SET `quadkey`=? WHERE `BSSID`=?")))
39 | {
40 | echo "Failed to prepare query: (" . $db->errno . ") " . $db->error;
41 | exit();
42 | }
43 | $quadkey = '';
44 | $bssid = '';
45 | if (!$stmt->bind_param("ss", $quadkey, $bssid))
46 | {
47 | echo "Failed to bind params: (" . $stmt->errno . ") " . $stmt->error;
48 | exit();
49 | }
50 | while ($coord_row = $coord_res->fetch_row()) {
51 | $bssid = $coord_row[0];
52 | $quadkey = base_convert(
53 | latlon_to_quadkey($coord_row[1], $coord_row[2], MAX_ZOOM_LEVEL),
54 | 2,
55 | 10);
56 | $stmt->execute();
57 | }
58 | $stmt->close();
59 | }
60 |
--------------------------------------------------------------------------------
/api/.htaccess:
--------------------------------------------------------------------------------
1 | RewriteEngine on
2 |
3 | # Rewrite for APIs
4 | RewriteRule ^(\w+)$ ../3wifi.php?a=$1 [NC,L,QSA]
5 |
--------------------------------------------------------------------------------
/api/ajax.php:
--------------------------------------------------------------------------------
1 | Auth($password, $login, true))
20 | break;
21 | $data = $UserManager->getApiKeys();
22 | if (is_null($data['rapikey']))
23 | {
24 | $data['rapikey'] = $UserManager->createApiKey(1);
25 | }
26 | $json['lastupdate'] = 0;
27 | $json['r'] = $data['rapikey'];
28 | $json['w'] = $data['wapikey'];
29 | $json['Successes'] = true;
30 | }
31 | break;
32 |
33 | case 'Find':
34 | $json['Successes'] = false;
35 | $ver = $_GET['Version'];
36 | $key = $_GET['Key'];
37 | $bssid = $_GET['BSSID'];
38 | if (!in_array($ver, array('0.5', '0.51'), true))
39 | {
40 | $json['Error'] = array('Code' => 0, 'Desc' => 'Unsupported version');
41 | break;
42 | }
43 | if (!is_string($key) || empty($key) || !is_string($bssid) || empty($bssid) || !ismac($bssid))
44 | {
45 | $json['Error'] = array('Code' => 0, 'Desc' => 'Wrong input');
46 | break;
47 | }
48 | if (!$UserManager->AuthByApiKey($key, true))
49 | {
50 | $json['Error'] = array('Code' => -100, 'Desc' => 'Wrong API key');
51 | break;
52 | }
53 | if ($UserManager->ApiAccess != 'read')
54 | {
55 | $json['Error'] = array('Code' => 0, 'Desc' => 'API key have no "read" rights');
56 | break;
57 | }
58 | if (!db_connect())
59 | {
60 | $json['Error'] = array('Code' => 0, 'Desc' => 'Database unavailable');
61 | break;
62 | }
63 | $bssid = mac2dec($bssid);
64 | $sql = "SELECT
65 | WiFiKey, WPSPIN
66 | FROM
67 | BASE_TABLE
68 | WHERE
69 | BSSID = $bssid
70 | ORDER BY
71 | time DESC
72 | LIMIT 10";
73 | $res = QuerySql($sql);
74 | $json['Keys'] = array();
75 | $json['WPS'] = array();
76 | while ($row = $res->fetch_row())
77 | {
78 | $json['Keys'][] = $row[0];
79 | $json['WPS'][] = pin2str($row[1]);
80 | }
81 | $json['Successes'] = true;
82 | break;
83 |
84 | case 'AppVersion':
85 | $json['Successes'] = true;
86 | $json['ActualyVersion'] = '0.51';
87 | $json['WhatNews'] = 'This API is depreciated and will be removed.';
88 | break;
89 |
90 | case 'GetUserInfo':
91 | $json['Successes'] = false;
92 | $ver = $_GET['Version'];
93 | $key = $_GET['Key'];
94 | if (!in_array($ver, array('0.5', '0.51'), true))
95 | {
96 | $json['Error'] = array('Code' => 0, 'Desc' => 'Unsupported version');
97 | break;
98 | }
99 | if (!is_string($key) || empty($key))
100 | {
101 | $json['Error'] = array('Code' => 0, 'Desc' => 'Wrong input');
102 | break;
103 | }
104 | if (!$UserManager->AuthByApiKey($key, true))
105 | {
106 | $json['Error'] = array('Code' => -100, 'Desc' => 'Wrong API key');
107 | break;
108 | }
109 | $json['Nickname'] = '3WiFi User';
110 | $json['RegDate'] = '';
111 | $json['Level'] = 1;
112 | $json['InvCount'] = 0;
113 | $json['Inviter'] = 'This API is depreciated and will be removed.';
114 | $json['LastUpdate'] = '';
115 | $json['Successes'] = true;
116 | break;
117 | }
118 |
119 | Header('Content-Type: application/json');
120 | echo json_encode($json);
121 |
--------------------------------------------------------------------------------
/apidoc.html:
--------------------------------------------------------------------------------
1 | 3WiFi: Описание API
2 |
3 |
4 |
5 |
6 |
7 |
8 |
Описание API
9 | Сервис предоставляет доступ к базе данных через API.
10 | Ниже описан процесс отправки запроса, а так же доступные методы.
11 |
12 |
13 |
14 |
Все API запросы отправляются по следующему URI: /api/%method%, где method - название API-метода.
15 |
Различные методы могут принимать данные в разном формате. Большая часть методов использует API-ключи для доступа к функциям.
16 |
Все методы возвращают результат выполнения result, который равен true в случае успеха, либо false в случае неудачи. В последнем случае также возвращается параметр error с описанием возникшей ошибки.
17 |
18 |
Реализованные методы API
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
Метод
27 |
Описание
28 |
Входные данные
29 |
Выходные данные
30 |
31 |
32 |
Тип данных
33 |
Параметры
34 |
35 |
36 |
37 |
apikeys
38 |
Получает API-ключи пользователя (и опционально генерирует их)
39 |
40 | POST (форма)
41 | POST (JSON-объект)
42 |
43 | string login - логин пользователя
44 |
45 | object profile - данные профиля пользователя: nick - никнейм, regdate - дата регистрации, level - уровень доступа
46 |
47 |
48 |
49 | string password - пароль пользователя
50 |
51 |
52 |
53 | bool genread - генерировать ключ на чтение при его отсутствии (опционально)
54 |
55 | array data - массив API-ключей, содержащий записи с полями key - ключ и access - права доступа для этого ключа (либо read - на чтение, либо write - на запись)
56 |
57 |
58 |
59 | bool genwrite - генерировать ключ на запись при его отсутствии (опционально)
Запрашивает точки доступа из базы (точное совпадение с BSSID и/или ESSID)
79 |
80 | GET (запрос)
81 | POST (форма)
82 | POST (JSON-объект)
83 |
84 | string key - API-ключ с правами на чтение
85 |
86 | array data - массив найденных данных, ключи массива содержат либо "BSSID", либо пару "BSSID|ESSID", в зависимости от того, что было запрошено; каждая запись в массиве содержит в себе ещё один массив соответствий со следующими параметрами: time - дата и время загрузки записи в базу, bssid - BSSID, essid - ESSID, sec - тип защиты, key - ключ сети, wps - WPS пин код, lat - широта, lon - долгота
87 |
88 |
89 |
90 | array bssid - массив BSSID точек доступа
91 |
92 |
93 |
94 | array essid - массив ESSID точек доступа (опционально), если указан - должен быть соразмерен с массивом BSSID и соответствовать записям в нём
95 |
96 |
97 |
98 | bool sens - учитывать регистр символов ESSID (опционально)
Генерирует WPS PIN коды на основе BSSID и данных из базы
122 |
123 | GET (запрос)
124 | POST (форма)
125 | POST (JSON-объект)
126 |
127 | string key - API-ключ с правами на чтение
128 |
129 | array data - массив найденных данных, ключи массива содержат "BSSID"; каждая запись в массиве содержит в себе ещё один массив scores со следующими параметрами: name - название алгоритма генерации пин кода, value - значение пин кода, score - вероятность (значение от 0 до 1)
Определяет модели устройств на основе BSSID и похожих устройств в базе
157 |
158 | GET (запрос)
159 | POST (форма)
160 | POST (JSON-объект)
161 |
162 | string key - API-ключ с правами на чтение
163 |
164 | array data - массив найденных данных, ключи массива содержат "BSSID"; каждая запись представляет из себя ещё один массив со следующими параметрами: name - название устройства, score - вероятность (значение от 0 до 1), count - кол-во таких же устройств в базе
165 |
166 |
167 |
168 | array bssid - массив BSSID точек доступа
169 |
170 |
171 |
172 | bool nocli - исключать Wi-Fi клиенты из определения (по умолчанию включено)
190 | {"result": true, "data": {"11:22:33:44:55:66": [{"name": "Router Model 1", "score": 0.9, "count": 2000}, {"name": "Router Model 2", "score": 0.75, "count": 500}, {"name": "Router Model 3", "score": 0.4, "count": 100}], "77:88:99:AA:BB:CC": [{"name": "Router Model 4", "score": 0.75, "count": 2000}, {"name": "Router Model 5", "score": 0.6, "count": 500}, {"name": "Router Model 6", "score": 0.2, "count": 100}]}}
191 |
192 |
193 |
194 |
apiranges
195 |
Получает список диапазонов по широте, долготе и радиусу
196 |
197 | GET (запрос)
198 | POST (форма)
199 | POST (JSON-объект)
200 |
201 | string key - API-ключ с правами на чтение
202 |
203 | array data - массив найденных данных; каждая запись в массиве содержит параметры: range - IP диапазон, netname - название сети, descr - описание диапазона, country - двухсимвольный код страны
13 | Другие участники проекта загружают результаты сканирования программы Router Scan. Подробнее о программе можно узнать на официальном сайте (ссылка на главной).
14 |
15 |
16 |
Моя точка есть в базе, как это произошло и как удалить её из базы?
17 |
18 |
19 |
Ваш роутер подвержен одной из известных уязвимостей. Обновите прошивку роутера и смените пароль Wi-Fi. Также рекомендуется поменять пароль доступа к настройкам роутера.
20 |
Удалить точку из базы нельзя. Сразу же после попадания в базу пароль считается скомпрометированным, поэтому придётся поменять его везде, где он использовался.
21 |
22 |
23 |
Как добавить точки с паролями в базу из других программ/баз?
24 |
25 |
26 | В базу заносится множество полей, например IP-адрес, DNS серверы, тип шифрования, и другие параметры. Запустите последнюю версию Router Scan и сделайте экспорт в файл TXT или CSV, приведите Ваши данные в соответствующий формат. Затем откройте изменённый файл в Router Scan, проверьте корректность полей, и загрузите данные через загрузчик 3WiFi. Также Вы можете использовать Excel, но делайте это крайне осторожно, т.к. он любит удалять некоторые данные, например в полях PIN часто удаляет лидирующие нули, а длинные цифры преобразует к экспоненциальному виду 3,8+E8.
27 |
28 |
29 |
Я вижу карту и точки, но у них не отображаются пароли!
30 |
31 |
32 | Необходимо авторизоваться на сайте - кнопка Вход в правом верхнем углу.
33 |
34 |
35 |
Карта точек доступа не работает, но сам сайт работает, что не так?
36 |
37 |
38 | Возможно ваш провайдер интернета блокирует Яндекс.Карты, попробуйте зайти под прокси или VPN.
39 |
40 |
41 |
Как зарегистрироваться? Как получить код приглашения?
42 |
43 |
44 |
Код приглашения можно приобрести, написав в форму обратной связи, или в Telegram чат Router Scan (см. главную страницу). После регистрации по коду приглашения ваш аккаунт получает уровень доступа "Пользователь", смотрите список уровней доступа ниже.
45 |
Вы также можете обойтись без кода приглашения, для этого необходимо вступить в сообщество Router Scan — тогда вы сможете воспользоваться гостевой учётной записью, если она не заблокирована.
46 |
47 |
48 |
Как долго я смогу пользоваться своим личным аккаунтом?
49 |
50 |
51 | Аккаунты на 3WiFi не имеют определённого срока действия, сможете пользоваться им сколько угодно, до тех пор, пока не нарушаете правила использования сайта.
52 |
63 | Сайт не предоставляет возможности изменить координаты. Однако Вы можете попросить осуществить повторный запрос к провайдерам геолокации для обновления координат - для этого свяжитесь с администрацией.
64 |
65 |
66 |
Как скачать базу себе?
67 |
68 |
69 | Никак! Попытки слить базу приведут к нарушению правил использования сайта, бану Вашего аккаунта, и бану всех приглашенных Вами и далее по цепочке. Никакие заслуги не снимут бан.
70 |
71 |
72 |
Как помочь проекту?
73 |
74 |
75 |
1. Программирование
76 | Исходники проекта есть на гитхабе, мы будем благодарны любой Вашей помощи: исправление существующих проблем, улучшение быстродействия кода, добавление нового функционала, перевод на другие языки, дизайн, отлавливание багов и т.д.
77 |
2. Добавление новых точек
78 | База растет только благодаря Вам! Сайт сам никого просканировать не может. Спасибо активным заливалам, без Вас этот проект бы не смог стать миллионником!
79 |
3. Денежная помощь
80 | У сайта нет кошельков, но Вы можете помочь разработчику программы Router Scan - см. соответствующий раздел на сайте stascorp.com.
81 |
82 |
83 |
Кто админы, как связаться?
84 |
85 |
86 | На главной странице есть ссылка на форму обратной связи, а также на Telegram чат Router Scan.
87 |
88 |
89 |
Какие уровни доступа бывают у участников проекта?
90 |
91 |
92 | Неавторизованный:
93 | Просмотр карты без паролей.
94 | Добавление точек в базу.
95 | Просмотр статистики и состояния сайта.
96 |
97 |
98 | Гостевой аккаунт:
99 | Просмотр карты с паролями.
100 | Поиск в стандартном режиме.
101 | Использование инструментов.
102 | Не может менять никнейм и пароль.
103 | Имеет один постоянный API ключ для поиска точек доступа.
104 | Имеет ограничение на поиск и получение точек из базы через API: не более одного запроса в 10 секунд.
105 | Сессия входа закрывается автоматически после 1 часа бездействия.
106 |
107 |
108 | Пользователь:
109 | Наследует права от гостя, а также:
110 | Загруженные точки привязываются к аккаунту.
111 | Может сменить никнейм и пароль.
112 | Может получить свой API ключ, а также ключ для пополнения базы из Router Scan.
113 | Не имеет ограничений по времени и количеству запросов.
114 | Возможность привязки поиска и статистики к выбранной локации / региону на карте.
115 | Управление разделом "Избранное".
116 | Управление приглашёнными пользователями.
117 | Личная статистика.
118 | Общее количество приглашений: 3 (если приглашён разработчиком или админом).
119 | Сессия входа закрывается автоматически после 24 часов бездействия.
120 |
121 |
122 | Разработчик:
123 | Наследует права от обычного пользователя, а также:
124 | Поиск в продвинутом режиме.
125 | Общее количество приглашений: 10 (если приглашён админом).
126 |
127 |
128 | Администратор:
129 | Наследует права от разработчика, а также:
130 | Может выдать бесконечное число приглашений.
131 | Имеет доступ к административным функциям.
132 |
133 |
134 |
Как стать разработчиком 3WiFi и получить соответствующий уровень доступа?
135 |
136 |
137 | Данный уровень доступа назначается только тем участникам сообщества, которые длительное время участвовали в разработке сервиса 3WiFi, и своими достижениями заслужили доверие и уважение в сообществе.
138 |
139 |
140 |
Как стать администратором 3WiFi?
141 |
142 |
143 | Развернуть из исходников локальную копию сервиса 3WiFi у себя на ПК или сервере, ссылка на репозиторий GitHub есть на главной странице. Стандартные данные входа для администратора - admin / admin.
144 |