first commit

This commit is contained in:
MiaoMint
2025-09-23 01:47:48 +08:00
commit 3ce69dbe2d
10 changed files with 1197 additions and 0 deletions

139
cmd/port-manager/main.go Normal file
View File

@@ -0,0 +1,139 @@
package main
import (
"flag"
"fmt"
"log"
"github.com/miaomint/port-manager/internal/scanner"
"github.com/miaomint/port-manager/internal/service"
"github.com/miaomint/port-manager/internal/web"
)
func main() {
var (
webPort = flag.Int("port", 8080, "Web服务器端口")
scanOnly = flag.Bool("scan", false, "仅扫描端口并输出结果")
randomPort = flag.Bool("random", false, "生成随机可用端口")
minPort = flag.Int("min", 8000, "随机端口最小值")
maxPort = flag.Int("max", 9999, "随机端口最大值")
showHelp = flag.Bool("help", false, "显示帮助信息")
)
flag.Parse()
if *showHelp {
showUsage()
return
}
// 创建扫描器和识别器
portScanner := scanner.NewPortScanner(true, false)
serviceIdentifier := service.NewServiceIdentifier()
// 仅扫描模式
if *scanOnly {
fmt.Println("🔍 正在扫描本地端口...")
result, err := portScanner.ScanPorts()
if err != nil {
log.Fatalf("扫描失败: %v", err)
}
fmt.Printf("\n📊 扫描结果 (共发现 %d 个端口):\n", result.TotalPorts)
fmt.Println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
fmt.Printf("%-8s %-10s %-12s %-30s %-s\n", "端口", "协议", "状态", "服务名称", "访问地址")
fmt.Println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
for _, port := range result.Ports {
identified := serviceIdentifier.IdentifyService(&port)
serviceURL := identified.ServiceURL
if serviceURL == "" {
serviceURL = "-"
}
fmt.Printf("%-8d %-10s %-12s %-30s %-s\n",
identified.Port,
identified.Protocol,
identified.State,
identified.ServiceName,
serviceURL,
)
}
return
}
// 随机端口生成模式
if *randomPort {
fmt.Printf("🎲 正在生成随机可用端口 (范围: %d-%d)...\n", *minPort, *maxPort)
port, err := portScanner.GenerateRandomPort(*minPort, *maxPort)
if err != nil {
log.Fatalf("生成随机端口失败: %v", err)
}
fmt.Printf("🎯 可用端口: %d\n", port)
return
}
// Web服务器模式默认
fmt.Println("🚀 启动端口管理器...")
fmt.Printf("📱 Web界面: http://localhost:%d\n", *webPort)
fmt.Println("💡 使用 --help 查看更多选项")
fmt.Println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
server := web.NewServer()
if err := server.Start(*webPort); err != nil {
log.Fatalf("启动Web服务器失败: %v", err)
}
}
func showUsage() {
fmt.Println(`
🔌 NAS 端口管理器
================
一个用于NAS的端口管理工具可以方便地检查系统当前已经占用的端口识别服务
提供快速访问入口,也可以作为随机端口生成器。
使用方法:
port-manager [选项]
选项:
-port int
Web服务器端口 (默认: 8080)
-scan
仅扫描端口并输出结果不启动Web服务器
-random
生成一个随机可用端口
-min int
随机端口最小值 (默认: 8000)
-max int
随机端口最大值 (默认: 9999)
-help
显示此帮助信息
示例:
# 启动Web界面 (默认端口8080)
port-manager
# 在指定端口启动Web界面
port-manager -port 9000
# 仅扫描端口并输出到终端
port-manager -scan
# 生成随机可用端口
port-manager -random
# 在指定范围内生成随机端口
port-manager -random -min 3000 -max 4000
功能特性:
✅ 扫描本地已占用端口
✅ 识别端口对应的服务
✅ 提供Web界面快速访问服务
✅ 生成随机可用端口
✅ 支持常见NAS服务识别
✅ 响应式Web界面设计
更多信息:
项目地址: https://github.com/miaomint/port-manager
`)
}