a white tablet with a few pens and a few pencils
파이썬 (Python),  Tech

Python으로 네트워크 스캐닝 마스터하기

FavoriteLoadingAdd to favorites
a white tablet with a few pens and a few pencils
Photo by Mailchimp on Unsplash

네트워크 스캐닝은 네트워크에서 장치를 검색하고 열린 포트와 서비스를 식별하는 프로세스입니다. 이는 네트워크 보안의 필수 부분으로, 시스템 관리자가 잠재적인 취약성과 공격 벡터를 식별할 수 있도록 합니다. 이 기사에서는 Python을 사용하여 네트워크 스캐닝 기술을 탐색합니다.

포트 스캐닝

포트 스캔은 대상 시스템에서 열린 포트를 식별하는 데 사용되는 기술입니다. Python은 소켓 및 nmap 라이브러리를 포함하여 포트 스캔을 구현하기 위한 여러 라이브러리를 제공합니다.

소켓 라이브러리 사용

소켓 라이브러리를 사용하여 기본 포트 스캔을 수행하려면 다음 코드를 사용할 수 있습니다.

import socket

target_host = "192.168.1.1"
target_ports = [21, 22, 80, 443]

for port in target_ports:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(2)
    result = s.connect_ex((target_host, port))
    if result == 0:
        print("Port {} is open".format(port))
    s.close()

이 코드는 target_ports 목록의 각 포트에 대한 소켓을 만들고 target_host에 연결을 시도합니다. 연결에 성공하면 포트가 열린 것으로 간주됩니다.

nmap 라이브러리 사용

nmap 라이브러리는 OS 감지 및 서비스 식별과 같은 추가 기능을 제공하는 고급 포트 검색 도구입니다. nmap 라이브러리를 사용하려면 다음 코드를 사용할 수 있습니다.

import nmap

nm = nmap.PortScanner()

target_host = "192.168.1.1"
target_ports = "21,22,80,443"

nm.scan(hosts=target_host, arguments="-p " + target_ports)

for host in nm.all_hosts():
    print("Host : %s" % host)
    for port in nm[host]['tcp'].keys():
        print("Port : %s\tState : %s" % (port, nm[host]['tcp'][port]['state']))

이 코드는 nmap.PortScanner() 클래스의 인스턴스를 만들고 scan() 메서드를 사용하여 지정된 target_ports를 사용하여 target_host에서 포트 스캔을 수행합니다. 그런 다음 결과가 콘솔에 인쇄됩니다.

네트워크 검색

네트워크 검색은 네트워크에서 장치를 식별하는 프로세스입니다. Python은 scapy 및 netifaces 라이브러리를 포함하여 네트워크 검색을 구현하기 위한 여러 라이브러리를 제공합니다.

scapy 라이브러리 사용

scapy 라이브러리를 사용하여 네트워크 검색을 수행하려면 다음 코드를 사용할 수 있습니다.

from scapy.all import ARP, Ether, srp

target_ip = "192.168.1.0/24"

# Create ARP request
arp = ARP(pdst=target_ip)

# Create Ethernet frame
ether = Ether(dst="ff:ff:ff:ff:ff:ff")

# Combine Ethernet and ARP requests
packet = ether/arp

# Send packet and capture response
result = srp(packet, timeout=3, verbose=0)[0]

# Extract results
devices = []
for sent, received in result:
    devices.append({'ip': received.psrc, 'mac': received.hwsrc})

# Print results
for device in devices:
    print("IP Address: {}\tMAC Address: {}".format(device['ip'], device['mac']))

이 코드는 target_ip에 대한 ARP 요청을 생성하고 srp() 함수를 사용하여 네트워크로 보냅니다. 그런 다음 응답을 캡처하고 구문 분석하여 네트워크에 있는 장치의 IP 및 MAC 주소를 추출합니다.

netifaces 라이브러리 사용

netifaces 라이브러리는 머신의 네트워크 인터페이스에 대한 정보를 검색하는 데 사용할 수 있는 더 단순한 도구입니다. netifaces 라이브러리를 사용하려면 다음 코드를 사용할 수 있습니다.

import net

netifaces 라이브러리 사용


import netifaces

# Get network interfaces
interfaces = netifaces.interfaces()

# Print information for each interface
for interface in interfaces:
    iface = netifaces.ifaddresses(interface)
    if netifaces.AF_INET in iface:
        ip = iface[netifaces.AF_INET][0]['addr']
        netmask = iface[netifaces.AF_INET][0]['netmask']
        broadcast = iface[netifaces.AF_INET][0]['broadcast']
        print("Interface: {}\tIP Address: {}\tNetmask: {}\tBroadcast: {}".format(interface, ip, netmask, broadcast))
이 코드는 interface() 함수를 사용하여 시스템의 네트워크 인터페이스 목록을 검색하고 ifaddresses() 함수를 사용하여 각 인터페이스에 대한 IP 주소, 넷마스크 및 브로드캐스트 주소를 검색합니다.


결론

네트워크 스캐닝은 시스템 관리자가 잠재적인 취약성과 공격 벡터를 식별할 수 있도록 하는 네트워크 보안의 중요한 부분입니다. 이 기사에서는 포트 스캐닝 및 네트워크 검색을 포함하여 Python을 사용하는 네트워크 스캐닝 기술을 살펴보았습니다. 이러한 기술을 사용하면 네트워크의 장치와 서비스를 더 잘 이해하고 이를 보호하기 위한 조치를 취할 수 있습니다.


참조

파이썬 문서: 소켓
파이썬 문서: nmap
Scapy 문서: scapy.all
네티페이스 문서: netifaces
error: Content is protected !!