일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GitLab
- 리눅스보안
- 정보보안산업기사
- Python
- 취약점진단
- 데이터모델링
- 보안기사실기
- 웹모의해킹
- 스노트
- 보안컨설팅
- AI
- DreamHack
- 정보보안기사
- NQ5
- 유닉스
- Bigdata
- docker
- Synology
- snort2.9
- 드림핵
- Snort
- 모의해킹
- dreamhack.io
- M1
- gns3
- 기아
- NEXUS
- 리눅스
- 정보보안
- VMware
- Today
- Total
Security_Analysis
진단 Tool 제작_2 (데이터 수집) 본문
앞서 글에서 데이터 분할은 완료하였으니 이제 데이터 프레임화를 진행해볼까 한다.
진단 Tool 제작_1 (데이터 분할) (tistory.com)
데이터 프레임화 에 대해서 간략하게만 정의하면 "표" 를 만드는 것이라고 생각했다.
자세한 설명은 구글링( 3) 데이터프레임이란? - 인투 더 파이썬(INTO THE PYTHON), 기초부터 AI까지 (wikidocs.net)에서 도와줄 것이다.
즉, 항목번호(U-01, U-02 ~ U-72) 별로, 각 텍스트 파일에 있는 값을 가져왔다
file_paths = glob.glob('./data/**/U-*.txt', recursive=True)
for file_path in file_paths:
file_name = os.path.basename(file_path)
srv_id = os.path.splitext(file_name)[0]
with open(file_path, 'rb') as file:
raw_data = file.read()
result = chardet.detect(raw_data)
encoding = result['encoding']
이 부분에서 벌써 오류가 발생했다.
바로 인코딩 문제였다.
분할된 파일을 읽다보니 EUCKR, UTF8, CP949 등 다양한 인코딩 에러가 발생했다. 이 모든 인코딩에 대해서 내가 경우의 수를 전부 반영해야 했으나, 검색해보니 chardet 라는 훌륭한 모듈이 있었다.
Chardet : 범용 문자 인코딩 탐지기 (
파일을 읽을 때 인코딩 기법을 확인하여 변경해주는 모듈이라고 한다. 이 모듈을 사용하니까 내가 사용하는 어떤 인코딩 기법에 대해서도 모두 변환이 가능했다.
with open(file_path, 'r', encoding=encoding) as file:
lines = file.readlines()
filtered_lines = []
for line in lines:
stripped_line = line.strip()
if not stripped_line:
continue
if stripped_line.startswith("##STATUS##"):
continue
if stripped_line[0].isdigit() and stripped_line[1] == '.':
continue
if '=' in stripped_line:
continue
filtered_lines.append(stripped_line)
"##STATUS##" 라는 값을 기준으로 하단에 정보가 출력되고 있어서 해당 내용을 제외하고 하단 내용을 출력하도록 조절했고,
" 1. ~~~~~" , "2. ~~~~~" 와 같이 보고서 작성 목적으로 사용되는 내용도 제외하고,
남은 내용들을 변수(fitlered_lines) 에 포함하도록 진행했다.
이제 filtered_lines에 저장된 내용 중 "-======" ,"-----" 와 같은 불필요한 내용이 있을 수도 있으니
combined_text = "\n".join(filtered_lines)
combined_text = combined_text.replace('=', '==')
와 같이 불필요한 내용을 제외하도록 하였다.
이렇게 까지 하고 나서 combined_text에 저장된 내용을 데이터 프레임에 값을 넣기 위해서 data.append 하였다
if combined_text:
data.append((srv_id, combined_text))
else:
data.append((srv_id, "No relevant content"))
이렇게 데이터프레임화가 완료되었다.
150여개의 자산에 대해서 72개의 항목의 파일을 열려면 총 10,800개 인데 이걸 데이터 프레임화 하면 시간 및 속도가 엄청 오래걸릴 것이기 때문에
한대로 진행을 했지만
속도 개선을 위해서 뭐가 좋은지도 파악을 해봐야 겠다.
'현업 > [dev]_Python' 카테고리의 다른 글
진단 Tool 제작_5 (결과 모델링 및 학습) (0) | 2024.07.11 |
---|---|
진단 Tool 제작_4 (데이터 저장) (0) | 2024.07.10 |
진단 Tool 제작_3 (데이터 분할 및 데이터 프레임화 코드 변경) (2) | 2024.07.09 |
진단 Tool 제작_1 (데이터 분할) (0) | 2024.06.26 |
취약점 분석 및 진단 Tool 제작 (0) | 2024.06.25 |