일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 리눅스보안
- DreamHack
- Bigdata
- 기아
- GitLab
- Python
- 유닉스
- 드림핵
- 보안기사실기
- 정보보안
- 보안컨설팅
- 취약점진단
- Snort
- 정보보안기사
- 스노트
- NEXUS
- NQ5
- VMware
- 정보보안산업기사
- docker
- AI
- Synology
- snort2.9
- dreamhack.io
- 데이터모델링
- 리눅스
- 웹모의해킹
- 모의해킹
- M1
- gns3
Archives
- Today
- Total
Security_Analysis
진단 Tool 제작_4 (데이터 저장) 본문
728x90
반응형
이제 데이터를 저장해야 한다.
진단 Tool 제작_3 (데이터 분할 및 데이터 프레임화 코드 변경)
DB에 Label 결과가 없는 상태로 1차 저장을 하고 Label 값을 사람이 넣고 난 후에 해당파일을 다시 넣으면 Label을 진행하여 각 현황에 맞는 결과를 DB에 저장한다. DB에 저장을 하기 위해서 코드를 작성했다.
if os_db_path:
os_conn = sqlite3.connect(os_db_path)
os_cursor = os_conn.cursor()
os_cursor.execute('SELECT COUNT(*) FROM processed_files WHERE filename = ?', (file_name,))
if os_cursor.fetchone()[0] == 0:
for srv_id, group in all_data.groupby('SRV_ID'):
table_name = srv_id.replace('-', '_')
os_cursor.execute(f'''
CREATE TABLE IF NOT EXISTS {table_name} (
id INTEGER PRIMARY KEY AUTOINCREMENT,
hostinfo_id INTEGER,
Content TEXT,
Label TEXT,
predict_Label TEXT,
FOREIGN KEY (hostinfo_id) REFERENCES hostinfo(id)
)
''')
group['hostinfo_id'] = hostinfo_id
group.drop(columns=['SRV_ID'], inplace=True)
group.to_sql(table_name, os_conn, if_exists='append', index=False)
processed_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
os_cursor.execute('INSERT INTO processed_files (filename, processed_date) VALUES (?, ?)',
(file_name, processed_date))
print(f"{file_name} 데이터가 {os_db_path}에 추가되었습니다.")
else:
print(f"{file_name} 기존 파일이므로 무시")
os_conn.commit()
os_conn.close()
id값은 전 게시글에서도 썼지만 자산번호 mapping 하기 위한 용도이며,
insert 구문을 통해 데이터를 추가하도록 했다.
각 항목별 ID 값에 해당하는 테이블이 있고, 각 테이블 안에는 스크립트 결과에서 항목별 Content(내용)이 있다.
아직 Label은 넣지 않았기 때문에 이런식으로 결과가 있는 상태에서 엑셀 파일에 Label 값을 다 넣고 다시 DB를 업데이트 한다.
os_conn.execute('BEGIN')
for index, row in label_df.iterrows():
srv_id = row['SRV_ID']
label = row['Label']
# OS DB 업데이트
table_name = srv_id.replace('-', '_')
os_cursor.execute('''
UPDATE {} SET Label = ?
WHERE hostinfo_id = ?
'''.format(table_name), (label, hostinfo_id))
# 트랜잭션 커밋
os_conn.commit()
이제 Label 값 까지 전부 들어갔다.
지금 보여지는 것은 단순 6대 뿐이지만, 테스트 결과가 100대 ~ 1000대 까지 간다면 모델링 학습할 때 더 정확한 결과를 도출해 낼 것이다.
728x90
반응형
'현업 > [dev]_Python' 카테고리의 다른 글
진단 Tool 제작_5 (결과 모델링 및 학습) (0) | 2024.07.11 |
---|---|
진단 Tool 제작_3 (데이터 분할 및 데이터 프레임화 코드 변경) (0) | 2024.07.09 |
진단 Tool 제작_2 (데이터 수집) (0) | 2024.06.27 |
진단 Tool 제작_1 (데이터 분할) (0) | 2024.06.26 |
취약점 분석 및 진단 Tool 제작 (0) | 2024.06.25 |