Files

140 lines
4.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.Print(`
🔌 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`)
fmt.Println()
}