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