snehalathaArakkonam/NetSentry-Scanner
GitHub: snehalathaArakkonam/NetSentry-Scanner
一款基于 Python 的多线程网络端口扫描工具,结合 Socket 与 Scapy SYN 扫描并提供 JSON 报告和加密导出功能。
Stars: 0 | Forks: 0
# 端口扫描器
一个简单的基于 Python 的工具,旨在使用 Python 的内置 socket 模块和 scapy 库识别目标机器上的开放端口。本项目演示了端口扫描的基础知识,可作为开发更高级网络工具的起点。
## 功能
- **基于 Socket 的扫描:** 使用标准的 Python socket 测试端口是否开放。
- **基于 Scapy 的扫描:** 发送 SYN 数据包并监听 SYN-ACK 回复(在大多数环境中需要提升的权限)。
- **可配置:** 轻松指定目标 IP、端口范围和超时时间。
- **经过测试的代码库:** 包含单元测试,确保可靠性和易于维护。
## 安装说明
你可以使用 **pip** 或 **Poetry** 来安装此项目。
### 使用 pip
1. **克隆仓库:**
git clone https://github.com/your-username/port-scanner.git
2. **进入项目目录:**
cd port-scanner
3. **创建并激活虚拟环境(推荐):**
python -m venv venv
source venv/bin/activate # 在 Windows 上使用:venv\Scripts\activate
4. **使用 pip 安装依赖:**
pip install -r requirements.txt
*(如果你没有 `requirements.txt`,只需运行 `pip install scapy` 或安装你需要的其他任何依赖。)*
### 使用 Poetry
1. **安装 Poetry**(如果你尚未安装):
[Poetry 安装指南](https://python-poetry.org/docs/#installation)
2. **克隆仓库:**
git clone https://github.com/your-username/port-scanner.git
3. **进入项目目录:**
cd port-scanner
4. **使用 Poetry 安装依赖:**
poetry install
5. **激活虚拟环境(可选):**
poetry shell
## 用法
主要有两种方式来运行端口扫描器:
### 1. 命令行执行
你可以使用以下任一命令来运行端口扫描器:
- **模块执行:**
python -m main
- **直接脚本执行:**
python main.py
**注意:** 为了支持这些命令,请在根目录下创建一个包含以下内容的 `main.py` 文件:
```
from port_scanner import PortScanner
def main():
target_ip = input("Enter target IP: ")
start_port = int(input("Enter start port: "))
end_port = int(input("Enter end port: "))
scanner = PortScanner(target_ip, start_port, end_port)
print("\nScanning using socket method...")
open_ports_socket = scanner.scan_ports_socket()
print("Open ports (socket):", open_ports_socket)
print("\nScanning using scapy method...")
open_ports_scapy = scanner.scan_ports_scapy()
print("Open ports (scapy):", open_ports_scapy)
if __name__ == "__main__":
main()
```
执行时,系统会提示你输入:
1. **目标 IP**(例如,`127.0.0.1`)
2. **起始端口**(例如,`1`)
3. **结束端口**(例如,`1024`)
然后脚本将执行两次扫描:
- **基于 Socket 的**扫描
- **基于 Scapy 的** SYN 扫描
它将打印出每种方法发现的开放端口列表。
### 2. 作为模块导入
你还可以直接在你的 Python 代码中使用 `PortScanner` 类:
```
from port_scanner.scanner import PortScanner
# 创建 scanner 实例
scanner = PortScanner(target_ip="127.0.0.1", start_port=1, end_port=1024, timeout=1)
# 基于 Socket 的扫描
open_ports_socket = scanner.scan_ports_socket()
print("Open ports (socket):", open_ports_socket)
# 基于 Scapy 的扫描
open_ports_scapy = scanner.scan_ports_scapy()
print("Open ports (scapy):", open_ports_scapy)
```
## 项目结构
```
port-scanner/
├── .gitignore
├── LICENSE
├── pyproject.toml
├── README.md
├── requirements.txt
├── main.py
├── port_scanner
│ ├── __init__.py
│ └── scanner.py
└── tests
├── __init__.py
└── test_scanner.py
```
- **main.py**:作为通过 `python -m main` 或 `python main.py` 运行端口扫描器的入口点。
- **port_scanner/scanner.py**:包含 `PortScanner` 类,具有基于 socket 和基于 scapy 的扫描方法。
- **tests/test_scanner.py**:使用 Python 内置的 `unittest` 框架和 `unittest.mock` 对 `PortScanner` 类进行的单元测试。
## 运行测试
1. **安装依赖**(例如,`scapy`、`unittest`)。
2. **运行测试**:
python -m unittest discover tests
或者直接在 `port-scanner` 目录下运行:
python -m unittest
测试将会:
- 模拟 socket 连接以测试成功和失败的连接。
- 模拟来自 scapy 的 `sr1` 以模拟特定端口的 SYN-ACK 响应。
## 许可证
该项目基于 [MIT 许可证](LICENSE) 授权。请随时在许可证条款允许的范围内进行修改和分发。
**祝你扫描和探索网络安全愉快!** 如果你有任何问题或建议,请随时提出 issue 或提交 pull request。
标签:Python, Scapy, 安全规则引擎, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护