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()
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)
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] );
}
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;
}