parth0xu/Port-Scanner
GitHub: parth0xu/Port-Scanner
一个使用 Python 编写的全范围 TCP 端口扫描器,能够扫描目标 IP 的全部 65,535 个端口并识别开放服务名称。
Stars: 1 | Forks: 0
# Port-EX — 全范围 TCP 端口扫描器
## 功能介绍
- 扫描指定 IP 地址的所有 65,535 个 TCP 端口
- 识别开放端口并解析服务名称(HTTP、SSH、FTP 等)
- 通过 `pyfiglet` 显示简洁的终端横幅
- 可配置的超时时间,以平衡速度与准确性
## 演示
```
____ _ _____ __
| _ \ ___ _ __| |_ | ____|/ _|
| |_) / _ \| '__| __| | _| |_
| __/ (_) | | | |_ | |___| _|
|_| \___/|_| \__| |_____|_|
Scanning 192.168.1.1 for open ports...
[+] Port 22 is open (ssh)
[+] Port 80 is open (http)
[+] Port 443 is open (https)
[+] Port 3306 is open (mysql)
```
## 安装说明
```
git clone https://github.com/parth0xu/Port-Scanner
cd Port-Scanner
pip install pyfiglet
```
## 使用方法
```
python3 port.py
# 在提示时输入目标 IP:192.168.1.1
```
## 工作原理
该扫描器使用 Python 的 `socket` 库尝试在每个端口上建立 TCP 连接(`connect_ex`)。返回值为 `0` 表示该端口接受了连接——即处于开放状态。`socket.getservbyport()` 调用会从系统的 `/etc/services` 数据库中将端口号映射为已知的服务名称。
```
result = s.connect_ex((target, port))
if result == 0:
service = socket.getservbyport(port)
print(f"[+] Port {port} is open ({service})")
```
**为什么使用 `connect_ex` 而不是 `connect`?** `connect()` 在失败时会引发异常。`connect_ex()` 则会返回错误代码——这使得在遍历数千个端口时更加简洁,无需为每个关闭的端口增加 try/except 开销。
## 局限性与改进计划
- 目前为单线程——扫描所有 65,535 个端口速度较慢(约 30 分钟以上)。下一个版本将使用 `concurrent.futures.ThreadPoolExecutor` 进行并行扫描。
- 仅支持 TCP connect 扫描——不支持 SYN(半开)扫描,因为后者需要使用原始 socket 和 root 权限。
- 暂不支持 banner grabbing——未来版本将尝试读取服务 banner 以进行版本检测。
## 展示技能
`Python` `Socket Programming` `Network Scanning` `TCP/IP` `Service Enumeration`
标签:Python, Socket编程, 插件系统, 数据统计, 无后门, 端口扫描, 网络安全, 逆向工具, 隐私保护