작은 메모장
7. CriminalIP API 활용 및 doc 파일 문서 자동화 본문
API를 제공하는 서비스들
- 공공데이터
- 포탈
등등
여기서 주로 쓰는 것 OSINT(오픈소스 인텔리전스)
- 구글 검색(구글 해킹)
- 이메일, 직원 정보 검색 등
이게 왜 퍼짐? 관리자 페이지 미흡(IoT 기기)
각종 IP, 도메인에 대한 취약점, 악성 내력같은 것을 조회 가능
취약점으로 인해 유출된 웹캠, 스크린샷 취득 정보 확인 가능
< 사용한 라이브러리 >
pip install folium
pip install python-docx
pip install docx2pdf
import requests
def get_criminalip_info(ip_address):
url = f"https://api.criminalip.io/v1/asset/ip/summary?ip={ip_address}"
payload = {}
headers = {
"x-api-key": "API KEY INPUT"
}
response = requests.request("GET", url, headers=headers, data=payload)
return response.json()
if __name__ == "__main__":
ip_address = "8.8.8.8"
result = get_criminalip_info(ip_address)
print(f"IP Address : {result['ip']}")
print(f"Inbound Score : {result['score']['inbound']}")
print(f"Outbound Score : {result['score']['outbound']}")
OSINT 기초적인 사용법
from flask import Flask, render_template, request
import re
from collections import Counter
import requests
import time
app = Flask(__name__)
def get_criminalip_info(ip_address):
url = f"https://api.criminalip.io/v1/asset/ip/summary?ip={ip_address}"
payload = {}
headers = {
"x-api-key": "YOUR API KEY"
}
response = requests.get(url, headers=headers, data=payload)
if response.status_code == 200:
return response.json()
else:
return None
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
file = request.files["file"]
with open("access.log", "wb") as f:
f.write(file.read())
with open("access.log", "r", encoding="utf-8") as f:
log_content = f.read()
ip_list = re.findall(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", log_content)
ip_counter = Counter(ip_list)
top_10_ips = ip_counter.most_common(10)
results = []
for ip_address, count in top_10_ips:
time.sleep(2)
result = get_criminalip_info(ip_address)
if result:
results.append(
{
"ip_address": result["ip"],
"inbound_score": result["score"]["inbound"],
"outbound_score": result["score"]["outbound"],
"country": result["country"],
"country_code": result["country_code"],
"region": result["region"],
"city": result["city"],
"latitude": result["latitude"],
"longitude": result["longitude"],
}
)
return render_template("index.html", results=results)
return render_template("index.html")
if __name__ == "__main__":
app.run(debug=True)
응용 사용
import openpyxl
workbook = openpyxl.load_workbook("korean_data.xlsx")
sheet = workbook.active
masked_workbook = openpyxl.Workbook()
masked_sheet = masked_workbook.active
for row in sheet.iter_rows(min_row=2, values_only=True):
name, address, phone_number, email = row[0], row[1], row[2], row[3]
username, domain = email.split("@")
masked_email = "*" * len(username) + "@" + domain
maksed_data = [name, address, phone_number, masked_email]
masked_sheet.append(maksed_data)
masked_workbook.save("masked_excel.xlsx")
split을 이용한 새로운 도메인 파싱
from docx import Document
from docx2pdf import convert
doc = Document("test.docx")
for paragraph in doc.paragraphs:
if "NAME" in paragraph.text:
paragraph.text = paragraph.text.replace("NAME", "홍길동")
if "EMAIL" in paragraph.text:
paragraph.text = paragraph.text.replace("EMAIL", "a@a.com")
if "COUNT" in paragraph.text:
paragraph.text = paragraph.text.replace("COUNT", "200")
doc_file = "test_01.docx"
pdf_file = "test_01.pdf"
doc.save(doc_file)
convert(doc_file, pdf_file)
docx 수정 및 pdf 변환
import streamlit as st
import pandas as pd
st.title("Loading Data")
uploaded_file = st.file_uploader("Upload Log File", type=["log"])
if uploaded_file is not None:
logs = uploaded_file.read().decode("utf-8")
log_lines = logs.split("\n")
log_data = [line.split(" ") for line in log_lines]
df = pd.DataFrame(log_data)
st.write(df)
streamlit 사용해서 간편하게 구현
'실더스 루키즈 교육' 카테고리의 다른 글
9. TCP/IP (0) | 2023.12.05 |
---|---|
8. 네트워크 개요 (0) | 2023.12.04 |
6. 파일 속성 리스트와 중요 정보 탐지 (0) | 2023.11.28 |
5. RSS, FTP, API를 이용한 서비스 자동화 (0) | 2023.11.27 |
4. 파일 입출력, 메일 자동화, 웹 서비스 크롤링 (0) | 2023.11.24 |