kabirschandra/Network-scanner
GitHub: kabirschandra/Network-scanner
一个用 C# 编写的纯原生、无外部依赖的 IPv4 网络工具包,旨在从底层实现 Ping、DNS、端口扫描等功能以帮助理解网络工具的工作原理。
Stars: 0 | Forks: 0
# 网络扫描器
一个用于 IPv4 的 C# 网络工具包
编写为 .NET 控制台项目。无外部库。
## 功能
- IPv4 ping
- IPv4 DNS 查询
- Traceroute
- TCP 端口扫描
- /24 子网扫描
- 用于运行命令的 Shell 包装器
- 带有 PASS/FAIL 输出的基础测试脚本
## 项目结构
| 目录/文件 | 内容 |
|---|---|
| `./src` | C# 源文件和 `.csproj` |
| `./testing` | Shell 测试脚本 |
| `./run.sh` | 命令包装器 |
| `./README.md` | 项目文档 |
## 要求
- .NET SDK 8.0 或更高版本
- Linux 或 WSL
- 网络访问
## 快速开始
在项目根目录下:
```
dotnet build src/src.csproj
```
使用包装器运行:
```
chmod +x run.sh
./run.sh ping 8.8.8.8
```
## 命令
### Ping
```
./run.sh ping 8.8.8.8
```
示例输出:
```
Address: 8.8.8.8
Status : Success
Time : 18 ms
```
### DNS 查询
```
./run.sh dns google.com
```
示例输出:
```
IPv4 Addresses:
172.217.213.102
172.217.213.100
172.217.213.139
```
### 端口扫描器
扫描单个端口:
```
./run.sh ports 192.168.0.1 80 80
```
扫描范围:
```
./run.sh ports 192.168.0.1 1 1024
```
示例输出:
```
OPEN : 80
```
### 子网扫描器
扫描从 `.1` 到 `.254` 的 `/24` 子网。
```
./run.sh subnet 192.168.0
```
示例输出:
```
192.168.0.1
192.168.0.2
192.168.0.50
```
### Traceroute
```
./run.sh tracert google.com
```
在 Linux/WSL 上,traceroute 可能需要权限:
```
sudo ./run.sh tracert google.com
```
## 测试
测试脚本位于:
```
./testing
```
运行所有测试:
```
chmod +x run.sh
chmod +x testing/*.sh
./testing/test_all.sh run
```
运行单个测试:
```
./testing/test_all.sh dns
./testing/test_all.sh ping
./testing/test_all.sh ports
./testing/test_all.sh subnet
```
## 手动测试值
您可以覆盖默认的测试目标。
Ping 测试:
```
PING_IP=192.168.0.1 ./testing/test_all.sh ping
```
端口扫描器测试:
```
TARGET_IP=192.168.0.1 TARGET_PORT=80 ./testing/test_all.sh ports
```
DNS 测试:
```
DNS_HOST=google.com ./testing/test_all.sh dns
```
子网测试:
```
SUBNET=192.168.0 ./testing/test_all.sh subnet
```
## 源文件
| 文件 | 用途 |
|---|---|
| `Program.cs` | 读取命令并分发到正确的工具 |
| `PingTool.cs` | 发送 ICMP ping 请求 |
| `DnsQueryTool.cs` | 将主机名解析为 IPv4 地址 |
| `PortScannerTool.cs` | 检查 TCP 端口 |
| `SubnetScannerTool.cs` | Ping `/24` 子网中的每个主机 |
| `TracertTool.cs` | 发送具有递增 TTL 值的 ping |
## 注意事项
此项目仅适用于 IPv4。
子网扫描器仅支持简单的 `/24` 扫描,例如:
```
./run.sh subnet 192.168.0
```
端口扫描器仅打印打开的端口。如果没有任何输出,则该端口可能已关闭或被过滤。
## 限制
- 仅支持 IPv4
- 仅支持基础 `/24` 子网扫描
- 仅支持 TCP 端口扫描
- 无异步扫描
- 大范围端口扫描可能会比较慢
- 在 Linux/WSL 上 Traceroute 可能需要提升权限
## 为什么开发此项目
开发此项目是为了通过直接使用 C# 实现基础网络工具来理解它们。目标不是替换 `nmap`、`ping` 或 `traceroute` 等工具,而是从基础层面了解这些工具的内部工作原理。
标签:Cutter, 网络工具, 网络扫描器