class base:
def __init__( self ):
self.main_database_name=None
self.sqlite_connection=None
self.cursor=None
self.sqlite_create_table_query=None
self.query=None
self.parametr=None
self.one_result=None
def connect(self,main_database_name):
self.main_database_name=main_database_name
self.sqlite_connection = sqlite3.connect(main_database_name)
self.cursor = self.sqlite_connection.cursor()
return main_database_name
def close(self):
if (self.sqlite_connection):
self.sqlite_connection.close()
print("закрыто")
def create_table(self,sqlite_create_table_query):
self.sqlite_create_table_query =sqlite_create_table_query
self.cursor.execute(sqlite_create_table_query)
self.sqlite_connection.commit()
return print("сохранено")
def insert(self,query,parametr):
self.query=query
self.parametr=parametr
self.cursor.execute(query,parametr)
self.sqlite_connection.commit()
print("записано")
def select_many(self,query,id):
self.cursor.execute(query)
self.one_result=self.cursor.fetchmany(size=id)
return print(self.one_result)
def select_singl(self,query):
self.cursor.execute(query)
self.one_result=self.cursor.fetchone()
return self.one_result
def connect():
name_DB = filedialog.askopenfilename(filetypes=(("Database", ".db"),))
mdb=base()
mdb.connect(name_DB)
return name_DB
def download():
# подключение к бд
name_DB=connect()
db=base()
db.connect(name_DB)
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 );'''
db.create_table(sqlite_create_table_query)
def on_select(event):
print(#имя базы данных) #<- как мне здесь вывести имя этой базы данных
# Если привязывались не к событию <<TreeviewSelect>>,
# то тут нужно проверить, что вообще что-то выбрано:
if not tree.selection():
return
# Получаем id первого выделенного элемента
selected_item = tree.selection()[0]
# Получаем значения в выделенной строке
values = tree.item(selected_item, option="values")
print(values[0])
class DB:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance:
return cls._instance
else:
new = object.__new__(cls)
cls._instance = new
return new
def __init__(self):
DBMixin._db = self
self.base = 'some_sqlite'
self.cur = 'some_sqlite_cursor'
def select(self):
return self.cur
def init_base(self, file_path):
self.base = file_path
class DBMixin:
_db: DB = None
def db_select(self):
return self._db.select()
class Foo(DBMixin):
def select_from_base(self):
return self.db_select()
if __name__ == '__main__':
base = DB()
bar = Foo()
print(bar.select_from_base())
print(bar.db_select())
from base import Base as db
def connect(db):
......
def download(db):
........
class base:
def __init__( self ):
self.main_database_name=None
.............
@property
def db_name(self):
_db_name = self.main_database_name
return _db_name
def on_select(event, db):
print(db.db_name)
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)
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()
def database():
window_database = Tk()
.....
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()
s1 = txt_database_name
sqlite_connection = sqlite3.connect(s1+'.db')
#Меньше кода меньше проблем с поиском, что откуда пришло
class base:
def __init__( self ):
self.main_database_name=None
создаем ненужную переменную
def connect(self,main_database_name):
self.main_database_name=main_database_name
в ненужную переменную ложим нужную
self.sqlite_connection = sqlite3.connect(main_database_name)
и только тут её используем
class base:
def __init__( self ):
pass
def connect(self,main_database_name):
self.sqlite_connection = sqlite3.connect(main_database_name)
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"),))
conn = db.connect(name_DB)
return conn
def download(db):
# подключение к бд
writer=connect(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 );'''
writer.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)"
writer.insert(query, new_string_db)
update_reques_db = tuple(requests)
new_string_request_db = "UPDATE session SET request= (?) WHERE id=" + str(id)
writer.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;"
writer.select_many(query,id)
for id in list_id:
table_id= str(id)
table_ip_src= "SELECT ip_src FROM session WHERE id=" + str(id)
result_ip_src=writer.select_singl(table_ip_src)
table_ip_dst= "SELECT ip_dst FROM session WHERE id=" + str(id)
result_ip_dst=writer.select_singl(table_ip_dst)
table_sport="SELECT sport FROM session WHERE id=" + str(id)
result_sport=writer.select_singl(table_sport)
table_dport="SELECT dport FROM session WHERE id=" + str(id)
result_dport=writer.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=""
# отключение бд
writer.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()