function GenerateFindQuery($cmtid, $BSSID, $ESSID, $Auth, $Name, $Key, $WPS, $Page, $Limit) { if (!isset($_SESSION['Search'])) { $_SESSION['Search'] = array(); } if (!isset($_SESSION['Search']['ArgsHash'])) { $_SESSION['Search']['ArgsHash'] = ''; } if (!isset($_SESSION['Search']['LastRowsNum'])) { $_SESSION['Search']['LastRowsNum'] = -1; } if (!isset($_SESSION['Search']['LastId'])) { $_SESSION['Search']['FirstId'] = -1; } if (!isset($_SESSION['Search']['LastId'])) { $_SESSION['Search']['LastId'] = -1; } if (!isset($_SESSION['Search']['LastPage'])) { $_SESSION['Search']['LastPage'] = 1; } $isLimitedRequest = false; $DiffPage = 0; $NextPageStartId = 0; $TestBSSID = preg_replace("/\\*{2,}/", '*', $BSSID); $SplitCount = substr_count($TestBSSID, ':') + substr_count($TestBSSID, '.') + substr_count($TestBSSID, '-'); $UnkCount = substr_count($TestBSSID, '*'); $Wildcards = array('□', '◯'); if (($SplitCount < $UnkCount || $TestBSSID == '*' || $BSSID == '') && FilterWildcards($ESSID, $Wildcards) == '') { $isLimitedRequest = true; } if ($Page == 1) { $_SESSION['Search']['FirstId'] = -1; $_SESSION['Search']['LastId'] = -1; } global $UserManager; $uid = $UserManager->uID; $sql = 'SELECT SQL_CALC_FOUND_ROWS `id`,`time`, `cmtid`,`cmtval`, `IP`,`Port`,`Authorization`,`name`, `NoBSSID`,`BSSID`,`ESSID`,`Security`, `WiFiKey`,`WPSPIN`,`WANIP`, `latitude`,`longitude`, uid IS NOT NULL fav FROM `BASE_TABLE` LEFT JOIN `comments` USING(cmtid) LEFT JOIN `GEO_TABLE` USING(BSSID) LEFT JOIN (SELECT uid,id FROM favorites WHERE uid=' . $uid . ') ufav USING(id) WHERE 1'; if ($cmtid != -1) { $sql .= ' AND (`cmtid` ' . ($cmtid == 0 ? 'IS NULL)' : "= {$cmtid})"); } if ($BSSID != '') { if (StrInStr($BSSID, '*')) { $mmac = mac2dec(mac_mask($BSSID)); $mask = mac2dec(mac_mask($BSSID, false)); $sql .= " AND (`BSSID` & {$mask} = {$mmac})"; } else { $sql .= ' AND `BSSID` = ' . mac2dec($BSSID) . ''; } } if ($ESSID != '') { if (HasWildcards($ESSID, $Wildcards)) { $sql .= ' AND `ESSID` LIKE \'' . UniStrWildcard($ESSID, $Wildcards) . '\''; } else { $sql .= ' AND `ESSID` = \'' . $ESSID . '\''; } } if ($Auth != '') { if (HasWildcards($Auth, $Wildcards)) { $sql .= ' AND `Authorization` LIKE \'' . UniStrWildcard($Auth, $Wildcards) . '\''; } else { $sql .= ' AND `Authorization` = \'' . $Auth . '\''; } } if ($Name != '') { if (HasWildcards($Name, $Wildcards)) { $sql .= ' AND `name` LIKE \'' . UniStrWildcard($Name, $Wildcards) . '\''; } else { $sql .= ' AND `name` = \'' . $Name . '\''; } } if ($Key != '') { if (HasWildcards($Key, $Wildcards)) { $sql .= ' AND `WiFiKey` LIKE \'' . UniStrWildcard($Key, $Wildcards) . '\''; } else { $sql .= ' AND `WiFiKey` = \'' . $Key . '\''; } } if ($WPS != '') { if (HasWildcards($WPS, $Wildcards)) { $sql .= ' AND `WPSPIN` LIKE \'' . UniStrWildcard($WPS, $Wildcards) . '\''; } else { $sql .= ' AND `WPSPIN` = \'' . $WPS . '\''; } } if ($_SESSION['Search']['ArgsHash'] == md5($cmtid . $BSSID . $ESSID . $Auth . $Name . $Key . $WPS)) { $sql = str_replace('SQL_CALC_FOUND_ROWS', '', $sql); } else { $_SESSION['Search']['LastRowsNum'] = -1; $_SESSION['Search']['FirstId'] = -1; $_SESSION['Search']['LastId'] = -1; $_SESSION['Search']['LastPage'] = 1; } $Sign = '<'; $DiffPage = (int) $Page - $_SESSION['Search']['LastPage']; if ($isLimitedRequest || $_SESSION['Search']['LastId'] == -1 || $_SESSION['Search']['FirstId'] == -1) { $NextPageStartId = 4294967295; } else { if ($DiffPage < 0) { $Sign = '>'; $NextPageStartId = (int) $_SESSION['Search']['FirstId']; } else { $NextPageStartId = (int) $_SESSION['Search']['LastId']; } } $DiffPage = abs($DiffPage); if ($DiffPage > 0) { $DiffPage--; } if ($isLimitedRequest) { $DiffPage = 0; } $sql .= ' AND `id` ' . $Sign . ' ' . $NextPageStartId . ' LIMIT ' . $DiffPage * 100 . ', ' . $Limit; $_SESSION['Search']['ArgsHash'] = md5($cmtid . $BSSID . $ESSID . $Auth . $Name . $Key . $WPS); $_SESSION['Search']['LastPage'] = $Page; return $sql; }
function db_add_ap($row, $cmtid, $uid) { global $checkexist; global $db; global $aps; // Отбираем только валидные точки доступа $addr = $row[0]; $port = $row[1]; if ($addr == 'IP Address' && $port == 'Port') { return 1; } $bssid = $row[8]; $essid = $row[9]; if (strlen($essid) > 32) { $essid = substr($essid, 0, 32); } $sec = $row[10]; $key = $row[11]; if (strlen($key) > 64) { $key = substr($key, 0, 64); } $wps = preg_replace('~\\D+~', '', $row[12]); // Оставляем только цифры if ($bssid == '<no wireless>') { return 2; } if (ismac($bssid)) { $NoBSSID = 0; $bssid = mac2dec($bssid); } else { $NoBSSID = 1; if ($bssid == '<access denied>') { $NoBSSID = 2; } if ($bssid == '<not accessible>') { $NoBSSID = 3; } if ($bssid == '<not implemented>') { $NoBSSID = 4; } $bssid = 0; } if (($NoBSSID || $wps == '') && ($essid == '' || $sec == '' || $sec == '-' || $key == '' || $key == '-')) { if ($NoBSSID == 0 || $essid != '' || $sec != '' || $key != '' || $wps != '') { return 3; } else { return 1; } // Вообще не содержит данных } if ($checkexist) { if (db_ap_exist($NoBSSID, $bssid, $essid, $key)) { return 4; // Уже есть в базе, пропускаем } } if ($NoBSSID == 0) { $aps[] = $bssid; // Записываем в очередь ожидания $chkgeo = QuerySql("SELECT `BSSID` FROM GEO_TABLE WHERE `BSSID`={$bssid} LIMIT 1"); if ($chkgeo->num_rows == 0) { // Добавляем новый BSSID с координатами NULL QuerySql("INSERT INTO GEO_TABLE (`BSSID`) VALUES ({$bssid})"); } $chkgeo->close(); } if ($cmtid == null) { $cmtid = 'NULL'; } $addr = _ip2long($addr); // IP Address if ($addr == 0 || $addr == -1) { $addr = 'NULL'; } $port = $port == '' ? 'NULL' : (int) $port; // Port $auth = $row[4] == '' ? 'NULL' : '\'' . $db->real_escape_string($row[4]) . '\''; // Authorization $name = '\'' . $db->real_escape_string($row[5]) . '\''; // Device Name $radio = $row[6] == '[X]' ? 1 : 0; // RadioOff $hide = $row[7] == '[X]' ? 1 : 0; // Hidden $essid = '\'' . $db->real_escape_string($essid) . '\''; // ESSID $sec = str2sec($sec); // Security $key = '\'' . $db->real_escape_string($key) . '\''; // Wi-Fi Key $wps = $wps == '' ? 1 : (int) $wps; // WPS PIN $lanip = _ip2long($row[13]); // LAN IP if ($lanip == 0 || $lanip == -1) { $lanip = 'NULL'; } $lanmsk = _ip2long($row[14]); // LAN Mask if ($lanmsk == 0) { $lanmsk = 'NULL'; } $wanip = _ip2long($row[15]); // WAN IP if ($wanip == 0 || $wanip == -1) { $wanip = 'NULL'; } $wanmsk = _ip2long($row[16]); // WAN Mask if ($wanmsk == 0) { $wanmsk = 'NULL'; } $gate = _ip2long($row[17]); // WAN Gateway if ($gate == 0 || $gate == -1) { $gate = 'NULL'; } $DNS = explode(' ', $row[18]); // DNS (up to 3 servers) for ($i = 0; $i < count($DNS); $i++) { $DNS[$i] = _ip2long($DNS[$i]); if ($DNS[$i] == 0 || $DNS[$i] == -1) { $DNS[$i] = 'NULL'; } } for ($i = 0; $i <= 3; $i++) { if (!isset($DNS[$i])) { $DNS[$i] = 'NULL'; } } QuerySql("INSERT INTO BASE_TABLE (`cmtid`,`IP`,`Port`,`Authorization`,`name`,`RadioOff`,`Hidden`,`NoBSSID`,`BSSID`,`ESSID`,`Security`,`WiFiKey`,`WPSPIN`,`LANIP`,`LANMask`,`WANIP`,`WANMask`,`WANGateway`,`DNS1`,`DNS2`,`DNS3`)\n\t\t\tVALUES ({$cmtid}, {$addr}, {$port}, {$auth}, {$name}, {$radio}, {$hide}, {$NoBSSID}, {$bssid}, {$essid}, {$sec}, {$key}, {$wps}, {$lanip}, {$lanmsk}, {$wanip}, {$wanmsk}, {$gate}, {$DNS['0']}, {$DNS['1']}, {$DNS['2']})\n\t\t\tON DUPLICATE KEY UPDATE\n\t\t\t`cmtid`={$cmtid},`IP`={$addr},`Port`={$port},`Authorization`={$auth},`name`={$name},`RadioOff`={$radio},`Hidden`={$hide},`NoBSSID`={$NoBSSID},`BSSID`={$bssid},`ESSID`={$essid},`Security`={$sec},`WiFiKey`={$key},`WPSPIN`={$wps},`LANIP`={$lanip},`LANMask`={$lanmsk},`WANIP`={$wanip},`WANMask`={$wanmsk},`WANGateway`={$gate},`DNS1`={$DNS['0']},`DNS2`={$DNS['1']},`DNS3`={$DNS['2']};"); if (!is_null($uid)) { // Берём id точки из таблицы base в любом случае (могут быть расхождения с mem_base) $res = $db->query("SELECT id FROM " . BASE_TABLE . " WHERE NoBSSID={$NoBSSID} AND BSSID={$bssid} AND ESSID={$essid} AND Security={$sec} AND WiFiKey={$key} AND WPSPIN={$wps}"); $row = $res->fetch_row(); $res->close(); $id = (int) $row[0]; // Выясняем, если кто-то уже загрузил такую точку $res = $db->query("SELECT COUNT(uid) FROM uploads WHERE id={$id}"); $row = $res->fetch_row(); $res->close(); $creator = $row[0] > 0 ? 0 : 1; // Привязываем загруженную точку к аккаунту $db->query("INSERT IGNORE INTO uploads (uid, id, creator) VALUES ({$uid}, {$id}, {$creator})"); } return 0; }
$row['comment'] = ''; } $cmtid = getCommentId($row['comment'], true); $row['IP'] = _ip2long($row['IP']); if ($row['IP'] == 0 || $row['IP'] == -1) { $row['IP'] = null; } $row['Port'] = $row['Port'] == '' ? null : (int) $row['Port']; if ($row['Authorization'] == '') { $row['Authorization'] = null; } $row['RadioOff'] = $row['RadioOff'] == '[X]' ? 1 : 0; $row['Hidden'] = $row['Hidden'] == '[X]' ? 1 : 0; if (ismac($row['BSSID'])) { $NoBSSID = 0; $row['BSSID'] = mac2dec($row['BSSID']); } else { $NoBSSID = 1; if ($row['BSSID'] == '<access denied>') { $NoBSSID = 2; } if ($row['BSSID'] == '<not accessible>') { $NoBSSID = 3; } if ($row['BSSID'] == '<not implemented>') { $NoBSSID = 4; } $row['BSSID'] = 0; } $row['Security'] = str2sec($row['Security']); $row['WPSPIN'] = preg_replace('~\\D+~', '', $row['WPSPIN']);