홍카나의 공부방

[컴퓨터 네트워크] 6-1. 파이썬 포트 스캐닝(Port Scanning) 구현 본문

Computer Network

[컴퓨터 네트워크] 6-1. 파이썬 포트 스캐닝(Port Scanning) 구현

홍문관카페나무 2023. 1. 11. 23:54

 

포트스캐닝(Port Scanning)이란

특정 시스템 혹은 네트워크에서 어떤 포트가 열린 채로 서비스를 진행하고 있는지 알아내는 과정이다.

 

포트별로 직접 접속하여 스캔하는 방식인

TCP Connect scan을 Python으로 구현해보자.

 

이는 대상 시스템에 로그 엔트리를 생성하기 때문에

가장 일반적인 포트 검색 유형이자 네트워크 침입에 사용되는 포트 검색 유형 중 하나다.

 

# do port scanning on localhost

import socket

def scan_ports(host, start_port, end_port):
    open_ports = []
    for port in range(start_port, end_port):
        print(port)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(0.1)
        result = sock.connect_ex((host, port))
        if result == 0:
            open_ports.append(port)
            print(f'Port {port} is open')
        sock.close()
    return open_ports

scan_ports('127.0.0.1', 1, 65535)

 

socket module과 connect_ex() 메소드를 이용해서 대상 포트에 연결을 설정하였다.

연결이 성공하면, 포트가 열려 있고 포트 번호가 인쇄 된다.\

( 포트가 닫혀있는게 아닌 열려 있어야 특정 프로세스가 통신을 받을 준비를 하고 있다는 뜻이다. )

 

포트 스캔 시간을 변경하고 싶으면 sock.settimeout(0.1) 부분의 파라미터를 조정해주면 된다.

 


 

0~1023번의 포트는 well-known port로, IANA에서 각 포트 번호에 일반적으로 사용되는 서비스가

어떤 것인지 알아볼 수 있다. 예를 들어서 HTTP는 80번 포트, HTTPS 트래픽은 일반적으로 443번 포트를 통해 전송된다.

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

 

Service Name and Transport Protocol Port Number Registry

mpm 45 udp Message Processing Module [recv]

www.iana.org

 

반응형