3WiFi объединенная база логов Router Scan

Discussion in 'Беспроводные технологии/Wi-Fi/Wardriving' started by akokarev, 13 Jul 2015.

?
  1. Бесплатным для всех

    1,000 vote(s)
    62.7%
  2. Платным для неактивных участников

    189 vote(s)
    11.9%
  3. База свободна для скачивания

    209 vote(s)
    13.1%
  4. База доступна для просмотра на сайте, но не для скачивания

    322 vote(s)
    20.2%
  5. Нужна оффлайн шифрованная база для 3WiFi Locator

    136 vote(s)
    8.5%
  6. Обязательная регистрация на сайте

    457 vote(s)
    28.7%
  7. Регистрация только по приглашениям

    185 vote(s)
    11.6%
  8. Ограничения на просмотр согласно рейтинга участников

    70 vote(s)
    4.4%
  9. Проект нужно закрыть, базу удалить

    21 vote(s)
    1.3%
Multiple votes are allowed.
  1. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Предложения по облегчению БД:
    1. Если есть две точки с одинаковым BSSID/ESSID/Sec/Key, но у одной есть WPS PIN, а у другой нет - удалить из БД точку без пина (ибо она не несёт дополнительной полезной информации). Примеры:
    Code:
    54:A0:50:DC:39:AC
    54:A0:50:DC:C1:7C
    и там ещё много
    2. Две точки - BSSID/ESSID совпадают, но у одной из них нет Sec/Key, а у второй есть - первую удалить. Примеры:
    Code:
    BC:AE:C5:C4:96:4B
    Ещё обнаружил на примере 54:A0:50:DC:35:8C (две записи), что в AllBig нет ведущих нулей в пароле и пин коде, а это означает, что вся загрузка с этим комментарием, возможно, теряет смысл.
     
    runalsh, TARGAS and Felis-Sapiens like this.
  2. Felis-Sapiens

    Felis-Sapiens Reservists Of Antichat

    Joined:
    21 Jul 2015
    Messages:
    616
    Likes Received:
    3,833
    Reputations:
    171
    Тоже хотел это написать. Ещё добавлю, есть одинаковые точки (например, 08:60:6E:23:10:24), но только у одной нет ведущих нулей у ESSID / KEY / PIN, а у другой есть. Соответственно первую нужно удалить
     
    #62 Felis-Sapiens, 29 Jul 2015
    Last edited: 29 Jul 2015
    binarymaster likes this.
  3. akokarev

    akokarev Well-Known Member

    Joined:
    6 Dec 2012
    Messages:
    164
    Likes Received:
    309
    Reputations:
    7
    Ох уж эти чистки... Вечная проблема! Один раз почистишь, с новыми загрузками опять появятся косяки... Я подумываю о создании некой функции, которая при загрузке будет проверять все загружаемые данные на валидность: отсутствие тэгов и спецсимволов, длину ключа и пинкода, соответствие бсида, айпи, маски шаблонам и некоторые другие правила (отсутствие нулей в схожей записи, ключи и пины вроде 3.8e10 ошибки экселя). Отдельные чистки меня утомили. Если кому интересно, могу дать доступ к мускулу для чистки - в личку. У меня сейчас другие дела, примерно месяц я буду в оффлайне
     
    binarymaster likes this.
  4. akokarev

    akokarev Well-Known Member

    Joined:
    6 Dec 2012
    Messages:
    164
    Likes Received:
    309
    Reputations:
    7
    Кстати, предварительно хостинг меня устроил, нужно оплатить. Если есть у кого анонимная симка или qiwi счёт, киньте в личку данные, хочу выставить счёт для оплаты в терминале.
     
  5. Ossen

    Ossen Active Member

    Joined:
    4 Jun 2015
    Messages:
    229
    Likes Received:
    155
    Reputations:
    0
    Думаю стоит добавить в отчёты или статистику порты wifi точек ходовые понятно что 80 8080 но при скане встречаются и другие
     
  6. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Функция таки нужна, да...
    Тут всё зависит от того, какие порты пользователи выбирали для сканирования, и какие из них попали в цель. Но в общем-то да, было бы полезно.
     
  7. Felis-Sapiens

    Felis-Sapiens Reservists Of Antichat

    Joined:
    21 Jul 2015
    Messages:
    616
    Likes Received:
    3,833
    Reputations:
    171
    Если длина пинкода меньше 8, это не так страшно - нужно проверять, не больше ли она, и нет ли других символов кроме цифр. А нули при необходимости добавить.

    Ключи же вроде 3.8e10, по-моему, надо оставлять. По крайней мере понятно, что ключ - 11 цифр (для данного примера), причём первые две это 38. Перебрать оставшиеся 9 вполне реально.
     
  8. akokarev

    akokarev Well-Known Member

    Joined:
    6 Dec 2012
    Messages:
    164
    Likes Received:
    309
    Reputations:
    7
    Если так просто перебрать 9 символов, то в элементарно перебрать большинство паролей от роутеров (обычно ставят только цифры, обычно это 8 знаков, реже 9 знаков). Ну а раз так, то вообще какой смысл в этом сайте, раз все так легко перебирается?
    Нет, я считаю неверные данные нужно фильтровать. Для большинства народу такие точки на карте только отвлекают.

    На счет пинкода интересно, я не задумывался о пропавшем спереди нуле...
    Но на счет 9 и больше знаков, разве пин не может быть 9-ти значным?? Где об этом можно прочитать?
     
  9. Felis-Sapiens

    Felis-Sapiens Reservists Of Antichat

    Joined:
    21 Jul 2015
    Messages:
    616
    Likes Received:
    3,833
    Reputations:
    171
    https://ru.wikipedia.org/wiki/Wi-Fi_Protected_Setup

    Ну, не так просто. Но, во-первых, не символов, а цифр, а, во-вторых, часов за 7 я на своей карточке переберу. Впрочем ты, наверно, прав.
     
  10. milkdrinker

    milkdrinker New Member

    Joined:
    31 Jul 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Отличный сайт, спасибо автору! Есть вопрос: если BSSID не находится в базе Яндекса и не наносится на карту 3wifi во время залива данных, то появится ли она потом, если Яндекс её добавит? Надеюсь, понятно объяснил.

    Короче, BSSID один только раз в базе Яндекса ищутся, при добавлении, или потом еще?
     
  11. akokarev

    akokarev Well-Known Member

    Joined:
    6 Dec 2012
    Messages:
    164
    Likes Received:
    309
    Reputations:
    7
    Да, я иногда делаю полную перепроверку всех записей, т.е. точка может добавиться на карту, переместиться. Но этот процесс долгий и ресурсоемкий, по-этому делаю это не часто. Еще в планах добавить другие источники местоположения.
     
  12. akokarev

    akokarev Well-Known Member

    Joined:
    6 Dec 2012
    Messages:
    164
    Likes Received:
    309
    Reputations:
    7
    Ну с 7-ю и меньше знаками в пинкоде понятно - пропущены нули впереди. А как быть с 9-ти и больше цифрами? Откуда такие взялись? Мне не понятно... Надо будет как-нибудь выловить такие устройства и посмотреть что там внутри на самом деле.
     
    binarymaster likes this.
  13. VladimirV

    VladimirV Well-Known Member

    Joined:
    1 Apr 2013
    Messages:
    1,130
    Likes Received:
    6,150
    Reputations:
    57
    Мне пока с 9-ю знаками пин поподался только в роутерах 'Huawei HG231f'. С ними все просто удаляем первый символ.
    Code:
    109.227.205.174    443    78    Done    admin:admin    Huawei HG231f            AC:E8:7B:D1:5D:D4    sd1-45    WPA2    08011974    037210441    192.168.1.100    255.255.255.0    109.227.205.174    255.255.255.0    109.227.205.254    82.117.162.230 82.117.162.231    
    binarymaster исправьте пожалуйста.
    Вот я скачал и поправил Вашу базу.
    BSSID_PIN_3wifi.tk_001.txt - сама база. разделенная TAB.
    DeletedRows_XXX.txt - это выхлоп программы при удалении. Записи по две строки, первая что удалили вторая что осталось.
    http://rghost.ru/private/7q25B8xFP/4a868063e44b2bd3661cf0ee5bb65fe2
    ПАСС - как на сайте.
     
    #73 VladimirV, 31 Jul 2015
    Last edited: 1 Aug 2015
    Payer likes this.
  14. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Сделал проверку на длину > 8 и на ноль в начале, он будет обрезаться.
    Но это только для парсера этой модели.
     
    Payer and VladimirV like this.
  15. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Добавил вывод топ 10 портов в статистику.
     
    gentux and VladimirV like this.
  16. djamv

    djamv Member

    Joined:
    16 Oct 2012
    Messages:
    129
    Likes Received:
    45
    Reputations:
    0
    А почему не используются карты от гугла? Точки моего провайдера гугл находит чаще у себя в бд чем яндекс
     
  17. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Гугл не позволяет получать координаты точек. Он предоставляет данные о геолокации, только если ему указать не менее двух точек, которые есть у него в базе, и при этом расположены рядом.

    Прикрутил ещё поддержку загрузки отчётов в формате TXT.
     
    gentux and VladimirV like this.
  18. VladimirV

    VladimirV Well-Known Member

    Joined:
    1 Apr 2013
    Messages:
    1,130
    Likes Received:
    6,150
    Reputations:
    57
    Может стоит прикрутить загрузку файлов из wigle.net, и брать координаты из них.
    Еще можно из ака wigle.net сканировать города. Когда у меня было в статистике 10 000, сайт мне отдавал примерно столько-же. Когда в статистике перевалило за 100 000 , я спокойно парсил районы. Но сейчас они поменяли движок, мой парсер уже не катит, перепишу попробую.
    Думаю если люди будут заливать файлы своих сканов, этого будет достаточно.
     
  19. ruslan89g

    ruslan89g Banned

    Joined:
    8 Nov 2012
    Messages:
    15
    Likes Received:
    2
    Reputations:
    0
    Подскажите как разместить 3wifi на локальном ресурсе (на компьютере) Помогите пожалуйста
    возникает ошибка:

    Code:
    Warning: mysqli_connect() [function.mysqli-connect]: (HY000/2003): Can't connect to MySQL server on '127.0.0.1' (10061) in C:\Users\admin\Desktop\MiniServX\www\con_db.php on line 8
    
    Fatal error: Call to a member function query() on a non-object in C:\Users\admin\Desktop\MiniServX\www\stat.php on line 25
    
    
    con_db.php:
    
    <?php
    /* Подключаемся к БД */
    $db_serv = "127.0.0.1";
    $db_name = "3wifi_tk";
    $db_user = "user_3wifi_tk";
    $db_pass = "";
    
    $db = mysqli_connect($db_serv, $db_user, $db_pass, $db_name);
    /* проверка подключения */
    if ($db->connect_errno) {
        echo "Не удалось подключиться к MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
    exit();
    }
    
    
    ?>
    
    
    stat.php:
    
    <?php
    $topPort=10;
    $topauth=100;
    $topname=30;
    $topbssid=30;
    $topessid=30;
    $topSecurity=30;
    $topWiFiKey=30;
    $topWPSPIN=30;
    $topWANGateway=30;
    $topDNS=30;
    ?>
    <html><head>
    <title>3WiFi: Статистика</title>
    <meta http-equiv=Content-Type content="text/html;charset=UTF-8">
    <link rel=stylesheet href="css/style.css" type="text/css">
    </head><body>
    <?php
    require 'con_db.php'; /* Коннектор MySQL */
    
    /* Таблица комментарии */
    $yvalue = 0;
    $ycount = 0;
    $query="SELECT COUNT(DISTINCT `comment`),COUNT(*) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $ycount=$row[1];
        $res->close();
    };
    echo "<table class=st1>";
    printf("<tr><th>count (%s)</th><th>comment (%s)</th></tr>\n", $ycount, $yvalue);
    $query="SELECT `comment`, COUNT(*) FROM free GROUP BY `comment` ORDER BY COUNT(*) DESC";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица устройства */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `name`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>name (top$topname)</th></tr>\n",$yvalue);
    $query="SELECT `name`, COUNT(*) FROM free GROUP BY `name` ORDER BY COUNT(*) DESC LIMIT $topname";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица порты */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `Port`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>Port (top$topPort)</th></tr>\n",$yvalue);
    $query="SELECT `Port`, COUNT(*) FROM free GROUP BY `Port` ORDER BY COUNT(*) DESC LIMIT $topPort";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица авторизация */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `Authorization`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>Authorization (top$topauth)</th></tr>\n",$yvalue);
    $query="SELECT `Authorization`, COUNT(*) FROM free GROUP BY `Authorization` ORDER BY COUNT(*) DESC LIMIT $topauth";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            $xcount = $row[1];
            $xvalue = $row[0];
            if (strlen($xvalue) > 64)
            {
                printf("<tr><td>%s</td><td style=\"max-width:700px;overflow-x:scroll\">%s</td></tr>\n", $xcount, $xvalue);
            } else {
                printf("<tr><td>%s</td><td>%s</td></tr>\n", $xcount, $xvalue);
            }
        };
        $res->close();
    };
    
    /* Таблица BSSID */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `BSSID`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>BSSID (top$topbssid)</th></tr>\n",$yvalue);
    $query="SELECT `BSSID`, COUNT(*) FROM free GROUP BY `BSSID` ORDER BY COUNT(*) DESC LIMIT $topbssid";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td><tt>%s</tt></td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица ESSID */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `ESSID`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>ESSID (top$topessid)</th></tr>\n",$yvalue);
    $query="SELECT `ESSID`, COUNT(*) FROM free GROUP BY `ESSID` ORDER BY COUNT(*) DESC LIMIT $topessid";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица Security */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `Security`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>Security (top$topSecurity)</th></tr>\n",$yvalue);
    $query="SELECT `Security`, COUNT(*) FROM free GROUP BY `Security` ORDER BY COUNT(*) DESC LIMIT $topSecurity";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица WiFiKey */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `WiFiKey`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>WiFiKey (top$topWiFiKey)</th></tr>\n",$yvalue);
    $query="SELECT `WiFiKey`, COUNT(*) FROM free GROUP BY `WiFiKey` ORDER BY COUNT(*) DESC LIMIT $topWiFiKey";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица WPSPIN */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `WPSPIN`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>WPSPIN (top$topWPSPIN)</th></tr>\n",$yvalue);
    $query="SELECT `WPSPIN`, COUNT(*) FROM free GROUP BY `WPSPIN` ORDER BY COUNT(*) DESC LIMIT $topWPSPIN";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td><tt>%s</tt></td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица WANGateway */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `WANGateway`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>WANGateway (top$topWANGateway)</th></tr>\n",$yvalue);
    $query="SELECT `WANGateway`, COUNT(*) FROM free GROUP BY `WANGateway` ORDER BY COUNT(*) DESC LIMIT $topWANGateway";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    
    /* Таблица DNS */
    $yvalue = 0;
    $query="SELECT COUNT(DISTINCT `DNS`) FROM `free`";
    if ($res = $db->query($query)) {
        $row = $res->fetch_row();
        $yvalue=$row[0];
        $res->close();
    };
    printf("<tr><th>count (%s)</th><th>DNS (top$topDNS)</th></tr>\n",$yvalue);
    $query="SELECT `DNS`, COUNT(*) FROM free GROUP BY `DNS` ORDER BY COUNT(*) DESC LIMIT $topDNS";
    if ($res = $db->query($query)) {
        while ($row = $res->fetch_row()) {
            printf("<tr><td>%s</td><td>%s</td></tr>\n", $row[1], $row[0]);
        };
        $res->close();
    };
    ?></table></body></html>
    
    
    upload.php:
    
    
    <html><head>
    <title>3WiFi: Добавление точек в базу</title>
    <meta http-equiv=Content-Type content="text/html;charset=UTF-8">
    </head><body>
    
    <form enctype="multipart/form-data" action="upload.php" method="POST">
        <!-- Поле MAX_FILE_SIZE должно быть указано до поля загрузки файла -->
        <input type="hidden" name="MAX_FILE_SIZE" value="15000000" />
        <!-- Название элемента input определяет имя в массиве $_FILES -->
        <table>
        <tr><td>Отчёт Router Scan:</td><td><input name="userfile" type="file" accept=".csv,.txt" /></td><td>(в формате <b>CSV</b> или <b>TXT</b>)</td></tr>
        <tr><td>Ваш комментарий:</td><td><input name="comment" type="text" <?php if (isset($_POST['comment'])) echo 'value="'.htmlspecialchars($_POST['comment']).'" '; ?>/></td></tr>
        <tr><td><input type="submit" value="Отправить файл" /></td><td></td></tr>
        </table>
    </form>
    
    <?php
    function getExtension($filename)
    {
        return substr(strrchr($filename, '.'), 1);
    }
    if ($_SERVER['REQUEST_METHOD'] == 'POST' && count($_FILES) > 0)
    {
        $uploaddir = 'uploads/';
        $filename = basename($_FILES['userfile']['name']);
        $uploadfile = $uploaddir . $filename;
    
        if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
            echo "Файл <b>".htmlspecialchars($filename)."</b> загружен на сервер.<br>\n";
            require 'con_db.php'; /* Коннектор MySQL */
    
            $ext = strtolower(getExtension($filename));
            $format = '';
            if ($ext == 'csv' || $ext == 'txt') $format = $ext;
            if ($format == '')
            {
                $format = 'csv';
                echo "Неизвестное расширение/формат файла, подразумевается CSV.<br>\n";
            }
            if (($handle = fopen($uploadfile, "r")) !== FALSE)
            {
                $comment = $_POST['comment'];
                if ($comment=='') $comment='none';
    
                $sql="INSERT INTO `$db_name`.`free` (`comment`, `IP`, `Port`, `Authorization`, `name`, `RadioOff`, `Hidden`, `BSSID`, `ESSID`, `Security`, `WiFiKey`, `WPSPIN`, `LANIP`, `LANMask`, `WANIP`, `WANMask`, `WANGateway`, `DNS`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE `comment`=?, `IP`=?, `Port`=?, `Authorization`=?, `name`=?, `RadioOff`=?, `Hidden`=?, `BSSID`=?, `ESSID`=?, `Security`=?, `WiFiKey`=?, `WPSPIN`=?, `LANIP`=?, `LANMask`=?, `WANIP`=?, `WANMask`=?,`WANGateway`=?, `DNS`=?;";
                $stmt = $db->prepare($sql);
    
                $row = 0;
                switch ($format)
                {
                    case 'csv':
                    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
                    {
                        $row++;
                        $num = count($data);
                        if ($row == 1)
                        {
                            if (($data[0]!=="IP Address")or($data[1]!=="Port")or($data[4]!=="Authorization")or($data[5]!=="Server name / Realm name / Device type")or($data[6]!=="Radio Off")or($data[7]!=="Hidden")or($data[8]!=="BSSID")or($data[9]!=="ESSID")or($data[10]!=="Security")or($data[11]!=="Key")or($data[12]!=="WPS PIN")or($data[13]!=="LAN IP Address")or($data[14]!=="LAN Subnet Mask")or($data[15]!=="WAN IP Address")or($data[16]!=="WAN Subnet Mask")or($data[17]!=="WAN Gateway")or($data[18]!=="Domain Name Servers"))
                            {
                                echo "Неподдерживаемый формат отчёта CSV, заголовки отсутствуют!<br>\n";
                                break;
                            }
                        }
                        if ($row !== 1)
                        {
                            $stmt->bind_param("ssssssssssssssssssssssssssssssssssss", // format
                                    // INSERT
                                    //    comment   IP        Port      Auth      Name      RadioOff  Hidden    BSSID     ESSID     Security   Key        WPS PIN    LAN IP     LAN Mask   WAN IP     WAN Mask   WAN Gate   DNS Serv
                                        $comment, $data[0], $data[1], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10], $data[11], $data[12], $data[13], $data[14], $data[15], $data[16], $data[17], $data[18],
                                    // UPDATE
                                        $comment, $data[0], $data[1], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10], $data[11], $data[12], $data[13], $data[14], $data[15], $data[16], $data[17], $data[18]
                            );
                            $stmt->execute();
                        }
                    }
                    break;
                    case 'txt':
                    while (($str = fgets($handle)) !== FALSE)
                    {
                        $data = explode("\t", $str);
                        $row++;
                        if ($row == 1)
                        {
                            if (count($data) != 23)
                            {
                                echo "Неподдерживаемый формат отчёта TXT, нестандартное количество столбцов!<br>\n";
                                break;
                            }
                        }
                        $stmt->bind_param("ssssssssssssssssssssssssssssssssssss", // format
                                // INSERT
                                //    comment   IP        Port      Auth      Name      RadioOff  Hidden    BSSID     ESSID     Security   Key        WPS PIN    LAN IP     LAN Mask   WAN IP     WAN Mask   WAN Gate   DNS Serv
                                    $comment, $data[0], $data[1], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10], $data[11], $data[12], $data[13], $data[14], $data[15], $data[16], $data[17], $data[18],
                                // UPDATE
                                    $comment, $data[0], $data[1], $data[4], $data[5], $data[6], $data[7], $data[8], $data[9], $data[10], $data[11], $data[12], $data[13], $data[14], $data[15], $data[16], $data[17], $data[18]
                        );
                        $stmt->execute();
                    }
                    break;
                }
                fclose($handle);
                $stmt->close();
             
                if ($row > 1) echo "Файл загружен в базу.<br>\n";
             
                if (file_exists($uploadfile))
                {
                    unlink($uploadfile);
                    echo "Временный файл удален.<br>\n";
                } else die("Ошибка: Временный Файл не найден!<br>\n");
            };
    
        } else {
            die("Ошибка: Файл не был загружен!<br>\n");
        }
    
        require 'chkxy.php';
    
        echo "Операция завершена.<br>\n";
    }
    ?></body></html> 
     
    #79 ruslan89g, 5 Aug 2015
    Last edited by a moderator: 5 Aug 2015
  20. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Ну и зачем вы скопировали весь этот код в сообщение?)

    Если вы раньше не имели дела с настройкой Apache/PHP и MySQL, лучше не вскрывать эту тему...
     
    Payer likes this.