네트워크 (LAN,WAN)

내부 네트워크 활동중인 IP 주소 및 운영체제(OS) 정보 수집

날으는물고기 2024. 11. 7. 00:11

내부 네트워크에서 활성화된 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

고려 사항

  1. 허가된 범위 내에서만 스캔: 네트워크 스캔은 반드시 허가된 범위 내에서 수행해야 합니다. 무단 스캔은 법적 문제를 초래할 수 있습니다.
  2. 스캔 빈도 관리: 빈번한 스캔은 네트워크에 부하를 줄 수 있으므로, 필요한 경우에만 수행하고 스캔 빈도를 적절히 관리해야 합니다.
  3. 보고서 검토 및 관리: 스캔 결과를 주기적으로 검토하고, 취약점이 발견될 경우 적절한 조치를 취해야 합니다.

 

이제 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으로 변환

변환을 위해 xsltprocnmap.xsl을 사용할 수 있습니다. nmap.xsl은 Nmap XML을 JSON으로 변환하는 XSLT 스타일시트입니다. 이 파일은 여기에서 다운로드할 수 있습니다.

  1. nmap-bootstrap-xsl 레포지토리에서 nmap.xsl 파일을 다운로드합니다.
  2. 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 설정

  1. Google Cloud Console에서 새 프로젝트를 생성합니다.
  2. API 및 서비스 > 라이브러리에서 Google Sheets API를 활성화합니다.
  3. 자격 증명 > 사용자 인증 정보 만들기 > 서비스 계정 키를 선택하여 JSON 형식의 인증 키 파일을 다운로드합니다.
  4. 다운로드한 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.")
  1. API 인증: 서비스 계정 키 파일을 사용하여 Google Sheets API에 인증합니다.
  2. Google 시트 열기: 지정한 Google 시트를 열어 데이터 등록을 위한 준비를 합니다.
  3. JSON 파일 읽기: Nmap 스캔 결과가 담긴 JSON 파일을 읽습니다.
  4. 데이터 처리 및 등록: 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.")
  1. API 인증: 서비스 계정 키 파일을 사용하여 Google Sheets API에 인증합니다.
  2. Google 시트 열기: 지정한 Google 시트를 열어 데이터를 등록할 준비를 합니다.
  3. XML 파일 읽기: xml.etree.ElementTree 라이브러리를 사용하여 XML 파일을 파싱합니다.
  4. 데이터 처리 및 등록: 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

실행 방법

  1. Python 스크립트 저장: update_google_sheets.py 파일을 원하는 디렉터리에 저장합니다.
  2. 배치 파일 저장: run_nmap_and_update_sheets.bat 파일을 update_google_sheets.py 파일과 동일한 디렉터리에 저장합니다.
  3. 배치 파일 실행: run_nmap_and_update_sheets.bat 파일을 더블 클릭하여 실행합니다.

이 배치 파일은 Nmap 스캔을 수행하고, 결과를 XML 파일로 저장한 후, Python 스크립트를 실행하여 Google Sheets에 데이터를 등록합니다.

  1. path/to/your/service-account-file.jsonYour Google Sheet Name을 실제 값으로 바꿔야 합니다.
  2. set PYTHON_PATH 부분을 실제 Python 설치 경로로 변경해야 합니다.
  3. Python 스크립트 실행을 위해서는 Nmap과 Python이 설치되어 있어야 하며, 필요한 Python 라이브러리(gspread, google-auth)가 설치되어 있어야 합니다.

이제 모든 과정을 자동화하여 배치 파일을 실행하는 것만으로 Nmap 스캔 결과를 Google Sheets에 등록할 수 있습니다.

728x90