• Как узнать индекс динамического виджета tkinter?

    @Durilka96 Автор вопроса
    zero exception, как узнать что это именно кнопка с ключом 2 выполнилась?
  • Как узнать индекс динамического виджета tkinter?

    @Durilka96 Автор вопроса
    zero exception, в каждом фрейме создаются 2 кнопки, которые по нажатию выполняют функцию добавить или удалить, но как функция будет знать какой именно кнопкой из какого фрейма она была вызвана, вот как ей передать этот индекс?
  • Как передать имя базы данных в другую функцию?

    @Durilka96 Автор вопроса
    Alexa2007,
    for id in list_id:
            table_id= str(id)
            table_ip_src= "SELECT ip_src FROM session WHERE id=" + str(id)
            result_ip_src=dbb.select_singl(table_ip_src)
            table_ip_dst= "SELECT ip_dst FROM session WHERE id=" + str(id)
            result_ip_dst=dbb.select_singl(table_ip_dst)
            table_sport="SELECT sport FROM session WHERE id=" + str(id)
            result_sport=dbb.select_singl(table_sport)
            table_dport="SELECT dport FROM session WHERE id=" + str(id)
            result_dport=dbb.select_singl(table_dport)
            tree.insert("", END,text=id, values=(table_id, result_ip_src, result_ip_dst, result_sport, result_dport))
            table_id=""
            result_ip_src=""
            result_ip_dst=""
            result_sport=""
            result_dport=""
        # отключение бд
        db.close()
        txt_log.insert(INSERT, "Соединение с SQLite закрыто\n")
        
    def on_select(event,db):
        #print(tree.selection())
        # Если привязывались не к событию <<TreeviewSelect>>,
        # то тут нужно проверить, что вообще что-то выбрано:
        if not tree.selection():
            return
        # Получаем id первого выделенного элемента
        selected_item = tree.selection()[0]
        # Получаем значения в выделенной строке
        values = tree.item(selected_item, option="values")
        print(db.db_name)
        print(values[0])
    
    # ГРАФИКА
    window = Tk()
    # Окно
    window.geometry('1015x600')
    window.title("SniffPcap")
    # Кнопки
    # Меню (Основное)
    menu = Menu(window)
    window.config(menu=menu)
    new_item = Menu(menu, tearoff=0)
    new_item.add_command(label='Авторы')
    new_item.add_separator()
    new_item.add_command(label='О программе')
    menu.add_cascade(label='Файл', menu=new_item)
    # Меню 2(база данных)
    database_item = Menu(menu, tearoff=0)
    database_item.add_command(label='Создать БД', command=database)
    database_item.add_separator()
    database_item.add_command(label='Открыть БД', command=connect(db))
    database_item.add_separator()
    database_item.add_command(label='Загрузить данные в БД', command=download(db))
    menu.add_cascade(label='База данных', menu=database_item)
    #Таблица бд
    tree = Treeview(window, columns=("ID","id", "ip_src","ip_dst","sport"),height=7, selectmode='browse')
    tree.heading('#0', text='ID')
    tree.heading('#1', text='id')
    tree.heading('#2', text='ip_src') 
    tree.heading('#3', text='ip_dst') 
    tree.heading('#4', text='sport')
    tree.heading('#5', text='dport')
    tree.column('#0', stretch=YES,anchor=N) 
    tree.column('#1', stretch=YES,anchor=N) 
    tree.column('#2', stretch=YES,anchor=N)
    tree.column('#3', stretch=YES,anchor=N)
    tree.column('#4', stretch=YES,anchor=N) 
    tree.column('#5', stretch=YES,anchor=N)
    tree.column('#0', width=50)
    tree.column('#1', width=50)
    tree.column('#2', width=110)
    tree.column('#3', width=110)
    tree.column('#4', width=50)
    tree.column('#5', width=50)
    tree['show'] = 'headings'
    tree.grid(row=2, columnspan=7, sticky="N")
    tree.bind('<<TreeviewSelect>>', on_select)
    # Поле ввода
    txt_in = scrolledtext.ScrolledText(window, width=60, height=15)
    txt_out = scrolledtext.ScrolledText(window, width=60, height=15)
    txt_log = scrolledtext.ScrolledText(window, width=75, height=10)
    txt_in.place(x=5, y=5)
    txt_out.place(x=510, y=5)
    txt_log.place(x=5, y=260)
    tree.place(x=635,y=260)
    window.mainloop()
  • Как передать имя базы данных в другую функцию?

    @Durilka96 Автор вопроса
    Alexa2007,
    from tkinter import *
    from scapy.all import *
    from tkinter import scrolledtext
    from tkinter import filedialog
    from tkinter.ttk import Treeview
    from scapy.utils import RawPcapReader
    from base import Base as db
    import dpkt
    import sys
    import sqlite3
    import os
    
    
    def clicked():
        window.quit()
    
    
    IPList = list()
    IPList_and_port = list()
    output_IPList = list()
    List_IP = list()
    one_session = list()
    list_ip_for_sessions = list()
    list_tcp = list()
    list_for_bd = list()
    requests = list()
    responses = list()
    list_id=list()
    
    
    
            
    
    
    def database():
        window_database = Tk()
        window_database.title("Создание базы данных")
        window_database.geometry('250x250')
        lbl = Label(window_database, text="Введите имя базы данных:")
        lbl.place(x=55, y=60)
        txt = Entry(window_database, width=29)
        txt.place(x=40, y=90)
        btn_db = Button(window_database, text="Создать", command=clicked)
        btn_db.place(x=100, y=120)
        window_database.mainloop()
        txt_database_name = txt.get()
        try:
            s1 = txt_database_name
            s2 = '.db'
            name_DB = s1 + s2
            sqlite_connection = sqlite3.connect(name_DB)
            cursor = sqlite_connection.cursor()
            txt_log.insert(INSERT, "База данных SQLite успешно создана\n")
            cursor.close()
        except sqlite3.Error as error:
            txt_log.insert(INSERT, "Ошибка при создании sqlite\n")
            txt_log.insert(INSERT, error)
            txt_log.insert(INSERT, "\n")
        finally:
            if (sqlite_connection):
                sqlite_connection.close()
        window_database.destroy()
    
    def connect(db):
        name_DB = filedialog.askopenfilename(filetypes=(("Database", ".db"),))   
        mdb=db
        mdb.connect(name_DB)
        return name_DB   
    
    def download(db):
        # подключение к бд
        name_DB=connect(db)
        dbb=db
        dbb.connect(name_DB)
        txt_log.insert(INSERT, "База данных ")
        name_db = os.path.basename(name_DB)
        txt_log.insert(INSERT, name_db)
        txt_log.insert(INSERT, " подключена\n")
        sqlite_create_table_query='''CREATE TABLE session (id INTEGER PRIMARY KEY ,ip_src TEXT ,ip_dst TEXT ,sport TEXT , dport TEXT ,request TEXT ,response TEXT );'''
        dbb.create_table(sqlite_create_table_query)
        txt_log.insert(INSERT, "Таблица session создана\n")
        file = filedialog.askopenfilename(filetypes=(("Trafic files", ".pcap"),))
        with open(file, 'rb') as f:
            schet = int()
            temp = True
            pcap = dpkt.pcap.Reader(f)
            scapy_cap = rdpcap(file)
            txt_log.insert(INSERT, "\n")
            txt_log.insert(INSERT, "Протоколы и их количество в файле:\n")
            txt_log.insert(INSERT, scapy_cap)
            txt_log.insert(INSERT, "\n")
            id = 0
            for timestamp, buf in pcap:
                eth = dpkt.ethernet.Ethernet(buf)
                if not isinstance(eth.data, dpkt.ip.IP):
                    txt_log.insert(INSERT, "Non IP Packet type not supported ")
                    txt_log.insert(INSERT, eth.data.__class__.__name__)
                    txt_log.insert(INSERT, "\n")
                    continue
                ip = eth.data
                List_IP.append(eth.data)
                list_ip_for_sessions.append(0)
                if isinstance(ip.data, dpkt.tcp.TCP):
                    ip_src = socket.inet_ntoa(ip.src)
                    ip_dst = socket.inet_ntoa(ip.dst)
                    sport = ip.data.sport
                    dport = ip.data.dport
            for counter in range(len(List_IP)):
                ip_dst = socket.inet_ntoa(List_IP[counter].dst)
                ip_src = socket.inet_ntoa(List_IP[counter].src)
                sport = List_IP[counter].data.sport
                dport = List_IP[counter].data.dport
                one_session.clear()
                for raw in List_IP:
                    schet += 1
                    if raw.data.__hdr_len__ >= 20 and raw.data.__hdr_len__ <= 60:
                        if (ip_dst == socket.inet_ntoa(raw.dst)) and (ip_src == socket.inet_ntoa(raw.src)) and (
                                sport == raw.data.sport) and (dport == raw.data.dport):
                            if list_ip_for_sessions[schet] == 0:
                                list_ip_for_sessions[schet] = 1
                                try:
                                    request = dpkt.http.Request(raw.data.data)
                                    list_id.append(id)
                                    list_for_bd.append(id)
                                    list_for_bd.append(ip_src)
                                    list_for_bd.append(ip_dst)
                                    list_for_bd.append(sport)
                                    list_for_bd.append(dport)
                                    requests.append(str (request))
                                    new_string_db = tuple(list_for_bd)
                                    query="INSERT INTO session VALUES (?,?,?,?,?,NULL,NULL)"
                                    dbb.insert(query, new_string_db)
                                    update_reques_db = tuple(requests)
                                    new_string_request_db = "UPDATE session SET request= (?) WHERE id=" + str(id)
                                    dbb.insert(new_string_request_db,update_reques_db)
                                    list_for_bd.clear()
                                    requests.clear()
                                    id = id + 1
                                except (dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):
                                    continue
                                one_session.append(request)
                                txt_in.insert(INSERT, one_session)
                                txt_in.insert(INSERT, "\n")
                                one_session.clear()
                        if (ip_src == socket.inet_ntoa(raw.dst)) and (ip_dst == socket.inet_ntoa(raw.src)) and (
                                dport == raw.data.sport) and (sport == raw.data.dport):
                            if list_ip_for_sessions[schet] == 0:
                                list_ip_for_sessions[schet] = 1
                                try:
                                    response = dpkt.http.Response(raw.data.data)
                                    responses.append(str(response))
                                    if  len(response)!=0:
                                        update_response_db = tuple(responses)
                                        new_string_response_db = "UPDATE session SET response= (?) WHERE id=" + str(id-1)
                                        dbb.insert(new_string_response_db,update_response_db)
                                        responses.clear()
                                except (dpkt.dpkt.NeedData, dpkt.dpkt.UnpackError):
                                    continue
                                one_session.append(response)
                                txt_out.insert(INSERT, one_session)
                                txt_out.insert(INSERT, "\n")
                    else:
                        txt_log.insert(INSERT, "Используется протокол: ")
                        txt_log.insert(INSERT, raw.data.__class__.__name__)
                        txt_log.insert(INSERT, "\n")
                schet = -1
                query="SELECT ip_src,ip_dst FROM session;"
        dbb.select_many(query,id)
  • Как передать имя базы данных в другую функцию?

    @Durilka96 Автор вопроса
    Alexa2007,ниже в коде идет главная функция в которой все обрабатывается и еще чуть ниже глобально запуск окна через tkinter в котором кнопке дана команда вызова download(db) да вместе вызова поставил скобки в которых вписал db, только теперь файловыйменеджер запускается сразу при запуске программы без какой либо команды( не хотелось бы так и выдает следующую ошибку 605e4b084ee26894242354.png
  • Как передать имя базы данных в другую функцию?

    @Durilka96 Автор вопроса
    добавил все как сказали, создал доп файл с расширением .py и перенес туда класс, подключил строкой from base import Base as db , выдает вот такую вот ошибку 605e4441095d0615791854.png
  • Как создать глобальную функцию через оператор?

    @Durilka96 Автор вопроса
    Денис Загаевский, вот сделал инверсию
    double& operator!(Dinmass &x1){
      int index=0;
      int size = x1.GetSize();
      double *arr = new double [size];
      double *p = x1.GetMas();
      int j = size -1;
      for (int i = size-1; i >= 0; i--) {
    	  arr [i] = p[j];
    
    	  printf("%.02f\n",arr[j]); //вывод на экран для наглядности, что работает
    	  j--;
      }
       return *arr;
    }
    далее нужно вот это вот наглядное вывести в главной функции, делаю так 
    printf( "Инвертация x1: %f \n\n", !x1  ); // но здесь он выводит только один элемент, а мне нужно весь массив, следовательно необходимо этот printf запихнуть в цикл, делаю это...
    for (int i = 0; i >10 ; i++) {
    	 printf( "Инвертация x1: %f \n\n", !x1[i]  );
      }

    но тогда пишет ошибку E2094 'operator+' not implemented in type 'Dinmass' for arguments of type 'int'
  • Почему V::set() не является членом "V"? В чем ошибка?

    @Durilka96 Автор вопроса
    а должно быть? если удаляю оттуда, то выходит 3 ошибки при компиляции
  • Как возможно отцентровать контент на сайте?

    @Durilka96 Автор вопроса
    т.е. весь код (header и body ) помещаю в grid с 3мя колонками?
  • Как преобразовать слово в массив букв c++?

    @Durilka96 Автор вопроса
    Евгений Шатунов,
    int main(int argc, _TCHAR * argv[]) {
    	// ---------------------------------------------------------------
    	// считывание слов, занесение в массив и вывод отфильтрованных от пробелов отдельных слов
    	system("chcp 1251");
    	int i = 0;
    	int k = 0;
    	start();
    	char ** rezult = read_string(argc, argv, i, k);
    	system("pause");
    	char ** filter = filter_str(rezult, i, k);
    	// char ** rez_2 = inverse(rezult,i);
    
    	system("pause");
    	return 0;
    }
    
    char ** read_string(int argc, _TCHAR *argv[], int & i, int & k) {
    	FILE* fp;
    	fp = fopen("1.txt", "rt");
    	int size = 0;
    	char ch;
    	while (ch = fgetc(fp) != EOF)
    		size++;
    	rewind(fp);
    	char *input_str = new char[size + 1];
    	fgets(input_str, size + 1, fp);
    	fclose(fp);
    	printf("Считаная строка:\n");
    	printf("%s\n", input_str);
    	system("pause");
    	clrscr();
    	while (*input_str == ' ')
    		input_str++;
    	k = strlen(input_str);
    	while (input_str[k - 1] == ' ') {
    		input_str[k - 1] = '\0';
    		k--;
    	}
    	k = 0;
    	for (int i = 0; i < strlen(input_str); i++) {
    		if ((input_str[i] == ' ') && (input_str[i + 1] != ' ')) {
    			k++;
    		}
    	}
    
    	char **array = new char*[++k];
    	printf("Массив слов:\n");
    	int w = 0;
    	while (w < k) {
    		if (*input_str != ' ') {
    			array[w] = strtok(input_str, " ");
    			input_str = input_str + strlen(array[w]) + 1;
    			w++;
    		}
    		else
    			input_str++;
    	}
    	for (i = 0; i < k; i++) {
    		printf("%s\n", array[i]);
    	}
    	return array;
    }
    
    char ** filter_str(char **array, int &i, int &k) {
    	FILE* fp;
    	fp = fopen("1.txt", "rt");
    	int size = 0;
    	char ch;
    	while (ch = fgetc(fp) != EOF)
    		size++;
    	rewind(fp);
    	char *input_str = new char[size + 1];
    	fgets(input_str, size + 1, fp);
    	fclose(fp);
    	printf("Отфильтрованное:\n");
    	for (i = 0; i < k; i++) {
    	   int l = strlen(array[i]);
    	   //в этом месте мне нужно обращаться и проверять каждую букву слова
    
    
    
    	}
    	return array;
    }
  • Как вывести недостающую статью из БД?

    @Durilka96 Автор вопроса
    alexalexes, 3тий пункт решил задачу, спасибо
  • На сайте отображается ?????, вместо русских символов, как починить?

    @Durilka96 Автор вопроса
    Спасибо большое, по поводу обезьян из сети вполне согласен. Да сложнее mysqli еще ничего не освоил, только начинаю процесс изучения бд и это мой первый проект связанный с ним, теория теорией, а без практики мало чему научишься, вот и учусь методом проб и ошибок, когда уж совсем не могу найти ответ в сети прибегаю к таким ресурсам как этот. С этим я мучился 2 дня, нервы сдали, пришел за советом...