first commit
This commit is contained in:
139
cmd/port-manager/main.go
Normal file
139
cmd/port-manager/main.go
Normal 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
|
||||
`)
|
||||
}
|
||||
Reference in New Issue
Block a user