Python에서 포트 스캐너 만들기

Manav Narula 2023년6월21일
Python에서 포트 스캐너 만들기

이 튜토리얼은 Python에서 포트 스캐너를 만드는 방법을 보여줍니다.

Python에서 포트 스캐너 만들기

먼저 포트의 기본 사항을 알아봅시다. 포트는 서버와 클라이언트 간에 일부 정보가 전달되는 네트워크의 끝점입니다.

포트 스캐너는 주어진 호스트에서 통신을 위해 어떤 포트가 열려 있는지 확인할 수 있는 간단한 응용 프로그램입니다.

포트 스캐너를 사용하여 연결을 위해 열려 있는 포트를 확인하고 포트에서 실행 중인 서비스에 대해 알 수 있습니다. 이 유형의 도구는 잠재적 침투 공격에 대한 보안 조치를 테스트하는 데 도움이 됩니다.

정보는 일반적으로 TCP 및 UDP 프로토콜을 사용하여 인터넷을 통해 교환됩니다. 이러한 프로토콜의 포트 범위는 0에서 65535까지이며 세 가지 범위로 나뉩니다.

시스템 포트 범위는 0~1023이고 사용자 포트는 1024~49151이며 그 위의 모든 포트는 동적 포트입니다.

포트 스캐너를 사용하면 모든 포트의 연결과 연결 성공 여부를 개별적으로 확인합니다. Python에서 이를 달성하는 방법에 대해 논의하겠습니다.

  • socket 모듈을 가져옵니다.
  • 소켓 개체를 만들고 지정된 호스트 서버의 포트에 연결을 시도합니다.
  • for 루프를 사용하여 포트 범위를 반복하고 각 포트에 개별적으로 연결을 시도합니다.
  • 연결을 테스트하는 함수를 생성하고 tryexcept 블록을 사용하여 연결 성공에 따라 TrueFalse를 반환합니다.
  • try 블록에서 socket.connect() 기능을 사용하여 연결 생성을 시도합니다. 연결에 성공하면 블록이 True를 반환합니다.
  • 연결에 실패하면 except 블록에서 예외가 발생하고 False가 반환됩니다.

이는 다음 코드에서 구현됩니다.

import socket

t = "https://www.hackthissite.org/"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


def check_port(port):
    try:
        c = s.connect((t, port))
        return True
    except:
        return False


for a in range(200):
    if check_port(a):
        print("Port", a)

위의 코드는 처음 200개의 포트를 검사하여 연결을 위해 열려 있는 포트가 있는지 확인합니다. 그렇게 하도록 허용하는 호스트만 확인해야 합니다.

간단한 포트 스캐너를 수정하고 몇 가지 흥미로운 기능을 추가할 수 있습니다. socket.settimeout() 함수를 사용하여 함수에 시간을 제공하여 타임아웃을 설정할 수 있습니다.

이 함수에 의해 설정된 시간보다 더 많은 시간이 걸리면 연결이 중단됩니다.

Python에서 포트 스캐너의 성능을 향상시키는 또 다른 방법은 멀티스레딩 개념을 사용하는 것입니다. Python의 threads 모듈은 애플리케이션에 더 많은 동시성을 제공하고 실행 시간을 개선할 수 있는 스레드를 만들고 관리하는 데 사용할 수 있습니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn