내부 네트워크에서 활성화된 IP 주소들의 운영체제(OS) 정보를 수집하기 위해 네트워크 스캐닝 도구를 사용할 수 있습니다. 대표적인 도구로는 Nmap이 있습니다. Nmap은 네트워크 탐색 및 보안 감사에 널리 사용되는 오픈 소스 도구로, IP 주소의 활성 상태 확인 및 OS 식별 등의 기능을 제공합니다.
다음은 Nmap을 사용하여 내부 네트워크의 IP 주소를 스캔하고 OS 정보를 수집하는 방법입니다.
Nmap 설치
대부분의 리눅스 배포판에서는 패키지 관리자를 통해 쉽게 설치할 수 있습니다.
Ubuntu / Debian
sudo apt-get update
sudo apt-get install nmap
CentOS / RHEL
sudo yum install nmap
Windows
Nmap 공식 웹사이트에서 Windows 설치 파일을 다운로드하여 설치할 수 있습니다.
Nmap 사용 예시
다음과 같은 명령어를 사용하여 네트워크를 스캔하고 OS 정보를 수집할 수 있습니다.
기본 스캔
기본적인 네트워크 스캔을 수행하여 활성화된 호스트를 찾을 수 있습니다.
nmap -sP 192.168.1.0/24
OS 탐지 스캔
OS 탐지 기능을 활성화하여 스캔합니다. 이 명령어는 네트워크 상의 모든 활성화된 호스트에 대해 운영체제 정보를 수집합니다.
sudo nmap -O 192.168.1.0/24
예시 출력
위 명령어를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
Nmap scan report for 192.168.1.1
Host is up (0.00013s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.33
이와 같이 각 IP 주소에 대해 OS 정보를 확인할 수 있습니다.
스캔 결과 저장
스캔 결과를 파일로 저장하여 나중에 분석할 수 있습니다.
sudo nmap -O 192.168.1.0/24 -oN scan_results.txt
고려 사항
- 허가된 범위 내에서만 스캔: 네트워크 스캔은 반드시 허가된 범위 내에서 수행해야 합니다. 무단 스캔은 법적 문제를 초래할 수 있습니다.
- 스캔 빈도 관리: 빈번한 스캔은 네트워크에 부하를 줄 수 있으므로, 필요한 경우에만 수행하고 스캔 빈도를 적절히 관리해야 합니다.
- 보고서 검토 및 관리: 스캔 결과를 주기적으로 검토하고, 취약점이 발견될 경우 적절한 조치를 취해야 합니다.
이제 Nmap을 사용하여 내부 네트워크의 활성화된 IP 주소들에 대해 OS 정보를 수집할 수 있습니다. 필요한 경우 추가적인 스캔 옵션을 사용하여 더 자세한 정보를 얻을 수도 있습니다. Nmap 스캔 결과를 JSON 파일로 저장하고, 그 JSON 파일을 읽어서 구글 시트에 등록하는 방법입니다.
1. Nmap 결과를 JSON 파일로 저장하기
Nmap은 -oX
옵션을 사용하여 XML 형식으로 결과를 저장할 수 있으며, 이 XML 파일을 xsltproc
도구를 사용하여 JSON으로 변환할 수 있습니다.
Nmap 스캔 결과를 XML로 저장
sudo nmap -O 192.168.1.0/24 -oX scan_results.xml
XML을 JSON으로 변환
변환을 위해 xsltproc
와 nmap.xsl
을 사용할 수 있습니다. nmap.xsl
은 Nmap XML을 JSON으로 변환하는 XSLT 스타일시트입니다. 이 파일은 여기에서 다운로드할 수 있습니다.
nmap-bootstrap-xsl
레포지토리에서nmap.xsl
파일을 다운로드합니다.xsltproc
도구를 사용하여 XML 파일을 JSON으로 변환합니다.
xsltproc nmap.xsl scan_results.xml > scan_results.json
이제 scan_results.json
파일이 생성됩니다.
2. JSON 파일을 읽어서 구글 시트에 등록하기
Python을 사용하여 JSON 파일을 읽고, Google Sheets API를 통해 구글 시트에 데이터를 등록합니다. 이 과정에서는 gspread
라이브러리와 Google API 클라이언트 라이브러리를 사용합니다.
Google Sheets API 설정
- Google Cloud Console에서 새 프로젝트를 생성합니다.
- API 및 서비스 > 라이브러리에서 Google Sheets API를 활성화합니다.
- 자격 증명 > 사용자 인증 정보 만들기 > 서비스 계정 키를 선택하여 JSON 형식의 인증 키 파일을 다운로드합니다.
- 다운로드한 JSON 키 파일을 프로젝트 디렉터리에 저장합니다.
Python 코드
필요한 라이브러리를 설치합니다.
pip install gspread google-auth
다음은 JSON 파일을 읽고 Google Sheets에 데이터를 등록하는 Python 스크립트입니다.
import json
import gspread
from google.oauth2.service_account import Credentials
# 구글 시트 API 인증 설정
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = Credentials.from_service_account_file('path/to/your/service-account-file.json', scopes=scope)
client = gspread.authorize(creds)
# 구글 시트 열기
spreadsheet = client.open('Your Google Sheet Name')
worksheet = spreadsheet.worksheet('Sheet1') # 시트 이름으로 변경 가능
# JSON 파일 읽기
with open('scan_results.json', 'r') as f:
data = json.load(f)
# 데이터 처리 및 구글 시트에 등록
# 예시 데이터 처리: 호스트별 OS 정보 등록
for host in data['nmaprun']['host']:
ip_addr = host['address']['@addr']
os_info = host['os']['osmatch'][0]['@name'] if 'osmatch' in host['os'] else 'Unknown'
worksheet.append_row([ip_addr, os_info])
print("Data has been inserted into Google Sheet.")
- API 인증: 서비스 계정 키 파일을 사용하여 Google Sheets API에 인증합니다.
- Google 시트 열기: 지정한 Google 시트를 열어 데이터 등록을 위한 준비를 합니다.
- JSON 파일 읽기: Nmap 스캔 결과가 담긴 JSON 파일을 읽습니다.
- 데이터 처리 및 등록: JSON 데이터를 처리하여 IP 주소와 OS 정보를 추출한 후, 이를 Google 시트에 등록합니다.
이제 Nmap 스캔 결과를 JSON 파일로 저장하고, 이를 Google 시트에 등록할 수 있습니다. 이 과정을 자동화하여 주기적으로 수행할 수도 있습니다. Nmap의 XML 출력을 직접 읽고 이를 Google Sheets에 등록하는 경우 작업을 위해 xml.etree.ElementTree
라이브러리를 사용하여 XML 파일을 파싱하고, gspread
를 사용하여 Google Sheets에 데이터를 등록합니다.
XML 파일 생성
Nmap 스캔 결과를 XML 파일로 저장합니다.
sudo nmap -O 192.168.1.0/24 -oX scan_results.xml
Python 스크립트
import xml.etree.ElementTree as ET
import gspread
from google.oauth2.service_account import Credentials
# Google Sheets API 인증 설정
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = Credentials.from_service_account_file('path/to/your/service-account-file.json', scopes=scope)
client = gspread.authorize(creds)
# Google 시트 열기
spreadsheet = client.open('Your Google Sheet Name')
worksheet = spreadsheet.worksheet('Sheet1') # 시트 이름으로 변경 가능
# XML 파일 읽기
tree = ET.parse('scan_results.xml')
root = tree.getroot()
# 데이터 처리 및 Google 시트에 등록
for host in root.findall('host'):
ip_addr = host.find("address[@addrtype='ipv4']").get('addr')
os_info = 'Unknown'
os_element = host.find('os')
if os_element is not None:
osmatch = os_element.find('osmatch')
if osmatch is not None:
os_info = osmatch.get('name')
worksheet.append_row([ip_addr, os_info])
print("Data has been inserted into Google Sheet.")
- API 인증: 서비스 계정 키 파일을 사용하여 Google Sheets API에 인증합니다.
- Google 시트 열기: 지정한 Google 시트를 열어 데이터를 등록할 준비를 합니다.
- XML 파일 읽기:
xml.etree.ElementTree
라이브러리를 사용하여 XML 파일을 파싱합니다. - 데이터 처리 및 등록: XML 파일에서 IP 주소와 OS 정보를 추출하고 이를 Google 시트에 등록합니다.
이 코드를 실행하면 scan_results.xml
파일에서 IP 주소와 OS 정보를 추출하여 지정한 Google 시트에 등록하게 됩니다.
윈도우 환경에서 Nmap을 사용하여 네트워크 스캔을 수행하고, 결과를 XML 파일로 저장한 뒤, 이 XML 파일을 읽어 Google Sheets에 데이터를 등록하는 Python 스크립트입니다.
import xml.etree.ElementTree as ET
import gspread
from google.oauth2.service_account import Credentials
# Google Sheets API 인증 설정
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = Credentials.from_service_account_file('path/to/your/service-account-file.json', scopes=scope)
client = gspread.authorize(creds)
# Google 시트 열기
spreadsheet = client.open('Your Google Sheet Name')
worksheet = spreadsheet.worksheet('Sheet1') # 시트 이름으로 변경 가능
# XML 파일 읽기
tree = ET.parse('scan_results.xml')
root = tree.getroot()
# 데이터 처리 및 Google 시트에 등록
for host in root.findall('host'):
ip_element = host.find("address[@addrtype='ipv4']")
if ip_element is not None:
ip_addr = ip_element.get('addr')
os_info = 'Unknown'
os_element = host.find('os')
if os_element is not None:
osmatch = os_element.find('osmatch')
if osmatch is not None:
os_info = osmatch.get('name')
worksheet.append_row([ip_addr, os_info])
print("Data has been inserted into Google Sheet.")
이제 Windows 환경에서 Nmap을 사용하여 네트워크 스캔을 수행하고, 결과를 Google Sheets에 등록하는 전체 과정을 완료할 수 있습니다. 이 코드를 실행하면 scan_results.xml
파일에서 IP 주소와 OS 정보를 추출하여 지정한 Google 시트에 등록하게 됩니다. Windows 환경에서 Nmap 스캔을 수행하고 결과를 Google Sheets에 등록하는 작업을 한번에 자동화하는 스크립트로 작업을 수행하기 위해 배치 파일(.bat)과 Python 스크립트를 조합하여 사용합니다.
Python 스크립트 작성
Python 스크립트를 작성하여 Nmap 스캔 결과를 Google Sheets에 등록하는 작업을 수행합니다.
update_google_sheets.py
import xml.etree.ElementTree as ET
import gspread
from google.oauth2.service_account import Credentials
import subprocess
# Nmap 스캔 수행 및 XML 파일로 저장
nmap_command = 'nmap -O 192.168.1.0/24 -oX scan_results.xml'
subprocess.run(nmap_command, shell=True, check=True)
# Google Sheets API 인증 설정
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = Credentials.from_service_account_file('path/to/your/service-account-file.json', scopes=scope)
client = gspread.authorize(creds)
# Google 시트 열기
spreadsheet = client.open('Your Google Sheet Name')
worksheet = spreadsheet.worksheet('Sheet1') # 시트 이름으로 변경 가능
# XML 파일 읽기
tree = ET.parse('scan_results.xml')
root = tree.getroot()
# 데이터 처리 및 Google 시트에 등록
for host in root.findall('host'):
ip_element = host.find("address[@addrtype='ipv4']")
if ip_element is not None:
ip_addr = ip_element.get('addr')
os_info = 'Unknown'
os_element = host.find('os')
if os_element is not None:
osmatch = os_element.find('osmatch')
if osmatch is not None:
os_info = osmatch.get('name')
worksheet.append_row([ip_addr, os_info])
print("Data has been inserted into Google Sheet.")
배치 파일 작성
위 Python 스크립트를 실행하는 배치 파일을 작성합니다.
run_nmap_and_update_sheets.bat
@echo off
REM Python 실행 경로 설정
set PYTHON_PATH=C:\Path\To\Python\python.exe
REM 작업 디렉터리로 이동
cd /d %~dp0
REM Python 스크립트 실행
%PYTHON_PATH% update_google_sheets.py
pause
실행 방법
- Python 스크립트 저장:
update_google_sheets.py
파일을 원하는 디렉터리에 저장합니다. - 배치 파일 저장:
run_nmap_and_update_sheets.bat
파일을update_google_sheets.py
파일과 동일한 디렉터리에 저장합니다. - 배치 파일 실행:
run_nmap_and_update_sheets.bat
파일을 더블 클릭하여 실행합니다.
이 배치 파일은 Nmap 스캔을 수행하고, 결과를 XML 파일로 저장한 후, Python 스크립트를 실행하여 Google Sheets에 데이터를 등록합니다.
path/to/your/service-account-file.json
와Your Google Sheet Name
을 실제 값으로 바꿔야 합니다.set PYTHON_PATH
부분을 실제 Python 설치 경로로 변경해야 합니다.- Python 스크립트 실행을 위해서는 Nmap과 Python이 설치되어 있어야 하며, 필요한 Python 라이브러리(gspread, google-auth)가 설치되어 있어야 합니다.
이제 모든 과정을 자동화하여 배치 파일을 실행하는 것만으로 Nmap 스캔 결과를 Google Sheets에 등록할 수 있습니다.
댓글