FPS/README.md (3884B)
1
2 # FPS(Fast Port Scanner)
3
4 FPS는 Python과 `Scapy` 라이브러리를 사용하여 특정 IP 주소의 여러 포트를 빠르게 스캔할 수 있도록 설계된 도구입니다. 이 도구는 **일괄 패킷 전송(batch sending)** 방식으로 스캔 속도를 높이며, 열려 있는 포트의 상태와 서비스 이름을 쉽게 확인할 수 있습니다.
5
6 ## 기능
7
8 - 여러 포트를 한 번에 스캔하여 빠르게 응답을 수집
9 - 지정된 포트가 열려 있는지, 닫혀 있는지, 또는 필터링 되었는지 확인
10 - Nmap 서비스 매핑(`nmap-services`) 파일을 참조하여 서비스 이름 표시
11 - 일괄 패킷 전송을 통해 네트워크 스캔 속도 향상
12
13 ## 설치 방법
14
15 ### 1. Python 설치
16 Python 3.6 이상이 설치되어 있어야 합니다. [Python 공식 웹사이트](https://www.python.org/downloads/)에서 Python을 설치합니다.
17
18 ### 2. Scapy 설치
19 Scapy는 네트워크 패킷을 생성하고 처리하는 데 필요한 라이브러리입니다. 다음 명령어로 설치할 수 있습니다:
20 ```bash
21 pip install scapy
22 ```
23
24 ### 3. 프로젝트 클론 및 파일 준비
25 프로젝트를 클론하고, `nmap-services` 파일을 프로젝트 폴더에 다운로드하여 배치합니다. `nmap-services` 파일은 Nmap의 공식 GitHub 저장소나 인터넷에서 다운로드할 수 있습니다.
26
27 ```bash
28 git clone https://github.com/sqzer-x/NetAtk.git
29 cd ./NetAtk/FPS
30 ```
31
32 ## 사용 방법
33
34 ### 기본 사용법
35
36 다음 명령어로 특정 IP 주소에 대해 기본 포트 스캔(1-1000번 포트)을 수행할 수 있습니다.
37 ```bash
38 python FPS.py <IP_ADDRESS>
39 ```
40
41 ### 포트 범위 지정
42 특정 포트 범위를 지정하려면 `-p` 옵션을 사용하세요. 예를 들어, `1-5000` 구간의 포트를 스캔하려면:
43 ```bash
44 python FPS.py <IP_ADDRESS> -p 1-5000
45 ```
46
47 ### 특정 포트 지정
48 포트 범위 대신 개별 포트를 콤마로 구분하여 지정할 수 있습니다. 예를 들어, `80`, `443`, `8080` 포트를 스캔하려면:
49 ```bash
50 python FPS.py <IP_ADDRESS> -p 80,443,8080
51 ```
52
53 ### 예시
54 ```bash
55 python FPS.py 192.168.1.1 -p 1-1024
56 ```
57
58 ## 코드 구조 및 설명
59
60 1. **`load_nmap_services`**: `nmap-services` 파일을 읽어와 포트 번호와 서비스 이름을 매핑하여, 스캔 결과에 서비스 이름을 표시할 수 있도록 합니다.
61
62 2. **`parse_ports`**: 포트 번호 입력을 해석하여, 범위(`1-5000`) 또는 개별 포트(`80,443`)를 처리합니다.
63
64 3. **`batch_scan`**: 일괄 패킷 전송 방식을 통해 모든 포트에 대해 SYN 패킷을 생성하고 한 번에 전송합니다. 응답이 있으면 포트를 열린 상태로 표시하고, 응답이 없는 경우 필터링된 것으로 처리합니다.
65
66 4. **`main` 함수**: 명령줄 인자를 처리하고 스캔을 실행하며, 결과를 사용자가 읽기 쉽도록 테이블 형식으로 출력합니다.
67
68 ## 출력 예시
69 아래는 `127.0.0.1`을 대상으로 기본 포트 스캔(1-1000번 포트)을 수행한 결과 예시입니다.
70
71 ```
72 Starting scan on 127.0.0.1 at 2024-10-26 13:32:43
73
74 Scan report for 127.0.0.1
75 Host is up. Scanned in 2.01 seconds.
76 992 closed ports and 2 filtered ports not shown.
77
78 PORT STATE SERVICE TTL
79 ---------------------------------------------
80 22/tcp open ssh 128
81 80/tcp open http 128
82 443/tcp open https 128
83 ```
84
85 ## 주의 사항
86 - **권한**: 포트 스캐닝에는 네트워크에 대한 권한이 필요합니다. 잘못된 사용은 법적 문제가 발생할 수 있으므로, 허가된 네트워크에서만 사용하세요.
87 - **네트워크 부하**: 일괄 전송 방식은 네트워크에 부하를 줄 수 있으므로, 필요한 범위에서만 스캔을 수행하는 것이 좋습니다.
88
89 ## 라이선스
90 이 프로젝트는 MIT 라이선스 하에 배포됩니다.