Пример #1
0
        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;
        }
Пример #2
0
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;
}
Пример #3
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']);