Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
7 / 7 / 0
Регистрация: 04.11.2016
Сообщений: 94

Количество посещений файла

14.02.2018, 21:49. Показов 911. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго всем времени суток! Помогите пожалуйста решить задачу: необходимо написать приложение-сценарий для анализа журнала регистрации доступа веб-сервера Apache.

Файл analyse.cpp – основной модуль программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include "stdafx.h"
#include "ListLib.h"
#include "CheckMask.h"
#include "winsock.h"
#pragma comment(lib,"wsock32.lib")
 
char * integer2ip(unsigned long ip);
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *file;
    char* file_name = "D:\\1\\aaa.nv.com.ua.access";
    char buff[38];     // Массив для ввода символов
 
    int total=0; // количество уникальных посетителей (хостов)
 
    file = fopen(file_name, "r" );
    if (file == 0)
    {
        printf("Такого файла не существует.");
        return(0);
    }
    int i=0;
 
    Node* current;
    Node n0;
    current = n0.makeHead();
 
    while (!feof(file))
    {
        fgets( buff, 38 , file ); 
        // регулярное выражение, выделяем в группу {} ip
        char p[]="{(\\d+.)*\\d+}.*\\d\\d\/\\a+\/\\d+\:\\d+\:\\d+"; 
 
        _bstr_t r;
        
        //Вызов функции, проверяющей строку на наличие в ней ip
        //Результат возвращается в переменную r
        REParseError ResultEx = CheckMaskEx(p,(_bstr_t)buff,&r);
 
        if(ResultEx == REPARSE_ERROR_OK)
        {
            int flag=0;
            // перевод ip к типу unsigned long
            unsigned long ip = inet_addr((char*)r);
            if (current->getIp()==0)
            {
                current = (new Node())->insert(current);
                // создаем первый элемент
                current->setIp(ip);
                current->setCount(1);
            }
            else
            {
                // Обход списка на предмет наличия ip
                current = n0.setCurent();
                for(int i = 0; ; i++ )
                {
                    if (current->getIp()!= ip)
                    {
                        // ip отличный от текущего - идем дальше
                        flag=0;
                        Node* nextNode = current->getNext();
                        if(current->getNext() == 0 ) break;
                        current = nextNode->setCurent();
                    }
                    else
                    {
                        // нашли нужный ip - увеличиваем счетчик
                        flag=1;
                        current->setCount(current->getCount()+1);
                        break;
                    }
                }
                // так ничего и не нашли - создаем новый элемент
                if (flag == 0)
                {
                    current = (new Node())->insert(current);
                    current->setIp(ip);
                    current->setCount(1);
                }
            }
        }
    }
    fclose(file);
 
    current = n0.setCurent();
    current = current->getNext(); // установили указатель списка на первый элемент
 
    // вывод всех хостов
    for(int i = 0; ; i++ )
    {
        printf ("%s\n",integer2ip(current->getIp()));
        total+=1;
        Node* nextNode = current->getNext();
        if(current->getNext() == 0 ) break;
        current = nextNode->setCurent(); 
    }
    printf("Total unique visitors: %d\n",total);
 
    return 0;
}
 
// Функция преобразования ip из числа в строку
char *integer2ip(unsigned long ip)
{
    char s1[20],s2[20],s3[20],s4[20];
    char *s = new char[20];
    strcpy(s,"");
    itoa(ip >> 24,s1,10);
    itoa(ip << 8 >> 24,s2,10);
    itoa(ip << 16 >> 24,s3,10);
    itoa(ip << 24 >> 24,s4,10);
    strcat(s,s4);
    strcat(s,".");
    strcat(s,s3);
    strcat(s,".");
    strcat(s,s2);
    strcat(s,".");
    strcat(s,s1);
    return s;
}
Файл CheckMask.h – модуль парсинга
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <atlrx.h>
#include <comdef.h>
 
/*enum REParseError {
    REPARSE_ERROR_OK = 0,               // No error occurred
    REPARSE_ERROR_OUTOFMEMORY,          // Out of memory
    REPARSE_ERROR_BRACE_EXPECTED,       // A closing brace was expected
    REPARSE_ERROR_PAREN_EXPECTED,       // A closing parenthesis was expected
    REPARSE_ERROR_BRACKET_EXPECTED,     // A closing bracket was expected
    REPARSE_ERROR_UNEXPECTED,           // An unspecified fatal error occurred
    REPARSE_ERROR_EMPTY_RANGE,          // A range expression was empty
    REPARSE_ERROR_INVALID_GROUP,        // A backreference was made to a group
                                        // that did not exist
    REPARSE_ERROR_INVALID_RANGE,        // An invalid range was specified
    REPARSE_ERROR_EMPTY_REPEATOP,       // A possibly empty * or + was detected
    REPARSE_ERROR_INVALID_INPUT,        // The input string was invalid
};*/
REParseError CheckMaskEx(_bstr_t bstrTemplate, _bstr_t bstrText,_bstr_t* bstrResult )
{
    int   j=0;
    CAtlRegExp<> reUrl;
    REParseError status = reUrl.Parse(bstrTemplate);
 
    if (REPARSE_ERROR_OK != status)
    {
        return status;
    }
 
    CAtlREMatchContext<> mcUrl;
    if (!reUrl.Match(bstrText, &mcUrl))
    {
        return REPARSE_ERROR_INVALID_INPUT;
    }
 
    for (UINT nGroupIndex = 0; nGroupIndex < mcUrl.m_uNumGroups;
            ++nGroupIndex)
    {
        const CAtlREMatchContext<>::RECHAR* szStart = 0;
        const CAtlREMatchContext<>::RECHAR* szEnd = 0;
        mcUrl.GetMatch(nGroupIndex, &szStart, &szEnd);
 
        ptrdiff_t nLength = szEnd - szStart;
 
        #ifndef _UNICODE
            char buffer[200];
            j += sprintf(buffer, "%.*s", nLength, szStart);
        #else   // _UNICODE
            WCHAR buffer[200];
            j += swprintf(buffer, L"%.*s", nLength, szStart);
 
        #endif // !_UNICODE
 
        _bstr_t cur(buffer);
        * bstrResult += cur;
        //bstrResult[nGroupIndex] = cur;
            
    }
    
    return REPARSE_ERROR_OK;
}
 
Файл ListLib.h – работа со списком
class Node
{
    unsigned long ip;
    int count;
    Node *next;
public:
    Node()
    {
        ip=0;
        count=0;
        next=0;
    }
    Node* makeHead()
    {
        setIp(0);
        setCount(0);
        next = this;
        return this;
    }
    /*  Вставляет узел после текущего узла*/  
    Node* insert(Node* curent){
        curent->next = this;
        curent = this;
        return curent;
    }
    /*  Устанавливает поле данных узла*/
    void setIp(unsigned long newip){
        ip = newip;
    }
    void setCount(int newcount){
        count = newcount;
    }
    /*  Возвращает указатель на следующий узел*/
    Node* getNext(){
        return next;
    }
    /*  Возвращает поле данных узла */
    int getCount(){
        return count;
    }
    unsigned long getIp(){
        return ip;
    }
 
    /*Устанавливает текущий узел и возвращает указатель на него*/
    Node* setCurent(){
        return this;
    }
};
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2018, 21:49
Ответы с готовыми решениями:

Количество пассивных посещений
Добрый день! подскажите пожалуйста как исправить код мне нужно сделать так, чтобы если &quot;посетитель сайта&quot; просмотрел...

Отследить количество посещений
Добрый день. Не знаю в этот ли раздел писать. У меня такая задача: нужно отследить кол-во посещений некого, допустим, интернет-магазина....

Количество посещений сайта
Всем доброго времени суток. Подскажите, имеет ли для Яндекса значение, сколько людей ежедневно заходят на сайт, сколько по времени они там...

2
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
15.02.2018, 17:35
Цитата Сообщение от fennix Посмотреть сообщение
необходимо написать приложение-сценарий для анализа журнала регистрации доступа веб-сервера Apache.
Больше конкретики, больше.
0
7 / 7 / 0
Регистрация: 04.11.2016
Сообщений: 94
15.02.2018, 19:35  [ТС]
Это был пример кода. В общем нужно чтобы работало, чтобы посетители могли логиниться и был отображен счетчик логов и все это реализовано на С++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2018, 19:35
Помогаю со студенческими работами здесь

Посчитать количество посещений сайта
Понимаю, что вопрос смешной, но я только начинаю изучать Java Script, а в интернете такое видел, но разобраться не смог. Помогите! ...

Количество посещений и заказов в интернет-магазине
Соотношение кол-ва посещений и реальных заказов в интернет-магазине. Каким должно быть оптимальное соотношение количества посещений и...

Можно ли отследить количество посещений одной страницы?
При том условии, что на эту страницу пользователь попал после редиректа, а не прямым способом. Есть такая страница site.ru/thanks,...

Счетчик посещений в виде текстового файла
Задание: Создать страницу и организовать счетчик ее посещений в виде текстового файла. При открытии страницы отображать сведения о номере...

Получить количество посещений за последнюю неделю за каждый день
Получить количество посещений за последнюю неделю за каждый день. пишу запрос SELECT COUNTER_DATE,PEOPLE, COUNT(PEOPLE) FROM...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru