Introduction

Nmap là một công cụ hữu ích được sử dụng để thăm dò mạng máy tính, bao gồm phát hiện máy chủ, dịch vụ và hệ điều hành. Hôm nay chúng ta sẽ thử làm một tool có chức năng cơ bản giống Ping Scanning bằng Python

Các bạn có thể tải xuống tại: Here

References / Sources: Suraj Singh (surajsinghbisht054@gmail.com), S.S.B Group, bitforestinfo.com

Tool này được mình chỉnh sửa và hơi khác với bản gốc của tác giả. Tool này được tạo ra nhằm mục đích kiểm tra các IP Address còn live (up) hay không. Lưu ý tool này sử dụng chính lệnh ping có sẵn trong các hệ điều hành (Linux, Windows,...). Do đó các packet được dùng để check host đều là ICMP ECHO.

Các tính năng:
 - Tốc độ cao (sử dụng đa luồng)
 - Hỗ trợ hầu hết các loại điều hành (Windows, Linux)
 - Input được vô số IP, kết quả được lưu lại

Usage

Đưa danh sách IP vào TargetList.txt (not subnet), các IP ngăn cách bởi xuống dòng. Sau đó chỉ việc chạy file PingScanner.py là xong, các IP live (up) sẽ được lưu vào Results.txt. Nếu muốn các bạn có thể đổi số lượng thread, lượng packet dành cho mỗi IP là bao nhiêu bằng cách thêm -h khi sử dụng (xem help)

Code

Main Engine (class ME)

- Hàm init khởi tạo các giá trị của class ME. Self là gì bạn đọc tự tìm hiểu. Nói sơ qua thì self tượng trưng cho một instance của class. Queue là một kiểu dữ liệu dùng để chứa các phần tử nhưng theo quy tắc (First In - First Out). Do đó Multiprocessing Queue chỉ khác queue thường ở chỗ hỗ trợ đa luồng tiếp cận. IP Collector dùng để lưu các địa chỉ IP đang live (up). Target là một mảng chứa các IP cần xử lí

- Hàm SaveOutput dùng để ghi các IP còn live vào file Results

- Hàm Booster dùng để chia luồng xử lí. Hàm sẽ chạy qua các IP cần xử lí trong self.target. Trong khi chạy qua, nếu lượng thread đang dùng bằng số lượng cho phép ở self.thread thì sẽ sleep trong 3s và cho phép dùng thêm 30 thread tránh tắc nghẽn (nhưng không vượt quá 200 vì tùy CPU mỗi máy mà có thể ảnh hưởng tới độ mượt,...). Tiếp theo vẫn trong vòng loop IP, chúng ta sẽ tạo 1 thread mới và lệnh cho thread đó chạy hàm PingScanner với dữ liệu đưa vào hàm PingScanner là 1 IP Address mà đang loop tới. Sau đó, mảng process sẽ lưu toàn bộ đống thread này lại. Sau khi loop xong IP, chúng ta duyệt qua mảng process và kết thúc các thread đã dùng bằng hàm join() (hàm này sẽ chờ cho tới khi thread xử lí xong mới kết thúc)

- Hàm ShowResults một lần nữa cố định lại các giá trị IP còn live (up) trong mảng IPCollector sau đó show ra màn hình

- Hàm OSChecker kiểm tra OS và đưa ra lệnh ping tương ứng và lưu vào self.cmd

- Hàm PingScanner nhận vào IP và đưa cho OS xử lí bằng hàm ping thông thường. Nếu xuất hiện cụm "TTL" thì xác định là live và ngược lại

Main & IPExtractor

- Hàm IPExtractor xử lí đầu vào từ file txt sang mảng IP

- Hàm main sử dụng thư viện optparse để thêm option khi run file .py. options sẽ lưu các giá trị từ input truyền vào

Author: Asayami Kurashin