-
SK쉴더스 루키즈 6일차 - 파이썬 모듈, numpy정보 보안 2025. 6. 13. 19:47
오늘은 파이썬의 모듈 numpy, matlab 등의 기술들을 배웠다.
import re # 정규표현식(re) 모듈을 불러옴 - IP 주소 추출에 사용됨import csv # CSV 파일 저장용 모듈import os # 파일 존재 여부 확인용 모듈from collections import Counter # 리스트에서 개수 세기 쉽게 해주는 Counter 클래스
# 로그 파일에서 IP 주소를 추출하는 함수def extract_ip_addresses(file_path): # file_path: 분석할 로그 파일 경로if not os.path.exists(file_path): # 파일이 존재하지 않으면print("파일이 존재하지 않습니다.") # 에러 메시지 출력return [] # 빈 리스트 반환하고 함수 종료
with open(file_path, 'r', encoding='utf-8') as f: # 파일을 UTF-8로 읽기 모드로 열기log_data = f.read() # 전체 로그 텍스트 읽기
ip_pattern = r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b' # IPv4 형식에 맞는 정규표현식ip_list = re.findall(ip_pattern, log_data) # 정규식으로 IP 주소 리스트 추출
return ip_list # 추출된 IP 주소 리스트 반환
# 가장 많이 등장한 IP 주소 N개를 뽑는 함수def count_top_ips(ip_list, top_n=3): # ip_list: 추출된 IP 목록, top_n: 출력할 개수 기본 3ip_counter = Counter(ip_list) # IP 주소들의 등장 횟수를 세어줌return ip_counter.most_common(top_n) # 가장 많이 등장한 상위 top_n개 반환
# 결과를 CSV 파일로 저장하는 함수def save_to_csv(ip_data, output_file='ip_analysis.csv'): # ip_data: [('ip', 횟수), ...] 리스트with open(output_file, 'w', newline='', encoding='utf-8') as f: # CSV 파일 쓰기 모드 열기writer = csv.writer(f) # CSV 작성자 객체 생성writer.writerow(['IP Address', 'Count']) # 첫 줄에 헤더 작성for ip, count in ip_data: # IP와 빈도를 하나씩 꺼내서writer.writerow([ip, count]) # 한 줄씩 CSV에 작성print(f"CSV 저장 완료: {output_file}") # 저장 완료 메시지 출력
# 메인 실행 함수def main():
log_path = input("로그 파일 경로를 입력하세요: ").strip() # 사용자로부터 로그 경로 입력받기ip_list = extract_ip_addresses(log_path) # 로그에서 IP 추출
if not ip_list: # 추출된 IP가 없다면print("IP를 찾지 못했습니다.") # 에러 메시지 출력return # 종료
top_ips = count_top_ips(ip_list, 3) # 상위 3개 IP 추출print("\n상위 3개 IP 주소:") # 결과 안내 출력for ip, count in top_ips: # 하나씩 출력print(f"{ip}: {count}회") # IP와 빈도 출력
save_to_csv(top_ips) # CSV 파일로 저장
# 스크립트가 직접 실행될 때만 main() 실행if __name__ == "__main__":main() # 메인 함수 호출ip들이 들어있는 로그파일을 분석하는 2번째 문제를 해결했다.
'정보 보안' 카테고리의 다른 글
SK쉴더스 루키즈AI 7,8,9일차 - 데이터 전처리, EDA (1) 2025.06.18 게임개발 19일차 (Unity Learn 9일차) (1) 2025.06.15 SK쉴더스 루키즈 5일차 - 파이썬 클래스 (0) 2025.06.12 SK쉴더스 루키즈 5일차 - 파이썬 함수 (0) 2025.06.11 SK쉴더스 루키즈 4일차 - 파이썬 조건문 반복문 (1) 2025.06.10