|
|
|
|
package net
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"b612.me/apps/b612/netforward"
|
|
|
|
|
"b612.me/starlog"
|
|
|
|
|
"fmt"
|
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var Cmd = &cobra.Command{
|
|
|
|
|
Use: "net",
|
|
|
|
|
Short: "网络工具,包括nat穿透,端口转发等",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
Cmd.AddCommand(netforward.CmdNetforward)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var natc NatClient
|
|
|
|
|
var nats NatServer
|
|
|
|
|
|
|
|
|
|
var dns, ipinfoaddr string
|
|
|
|
|
var timeout int
|
|
|
|
|
var maxHop int
|
|
|
|
|
var disableIpInfo bool
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
CmdNatClient.Flags().StringVarP(&natc.ServiceTarget, "target", "t", "", "forward server target address")
|
|
|
|
|
CmdNatClient.Flags().StringVarP(&natc.CmdTarget, "server", "s", "", "nat server command address")
|
|
|
|
|
CmdNatClient.Flags().StringVarP(&natc.Passwd, "passwd", "p", "", "password")
|
|
|
|
|
CmdNatClient.Flags().BoolVarP(&natc.enableTCP, "enable-tcp", "T", true, "enable tcp forward")
|
|
|
|
|
CmdNatClient.Flags().BoolVarP(&natc.enableUDP, "enable-udp", "U", true, "enable udp forward")
|
|
|
|
|
CmdNatClient.Flags().IntVarP(&natc.DialTimeout, "dial-timeout", "d", 10000, "dial timeout milliseconds")
|
|
|
|
|
CmdNatClient.Flags().IntVarP(&natc.UdpTimeout, "udp-timeout", "D", 60000, "udp connection timeout milliseconds")
|
|
|
|
|
Cmd.AddCommand(CmdNatClient)
|
|
|
|
|
|
|
|
|
|
CmdNatServer.Flags().StringVarP(&nats.ListenAddr, "listen", "l", "", "listen address")
|
|
|
|
|
CmdNatServer.Flags().StringVarP(&nats.Passwd, "passwd", "p", "", "password")
|
|
|
|
|
CmdNatServer.Flags().Int64VarP(&nats.UDPTimeout, "udp-timeout", "D", 60000, "udp connection timeout milliseconds")
|
|
|
|
|
CmdNatServer.Flags().Int64VarP(&nats.NetTimeout, "dial-timeout", "d", 10000, "dial timeout milliseconds")
|
|
|
|
|
CmdNatServer.Flags().BoolVarP(&nats.enableTCP, "enable-tcp", "T", true, "enable tcp forward")
|
|
|
|
|
CmdNatServer.Flags().BoolVarP(&nats.enableUDP, "enable-udp", "U", true, "enable udp forward")
|
|
|
|
|
Cmd.AddCommand(CmdNatServer)
|
|
|
|
|
|
|
|
|
|
CmdNetTrace.Flags().StringVarP(&dns, "dns", "d", "", "自定义dns服务器")
|
|
|
|
|
CmdNetTrace.Flags().StringVarP(&ipinfoaddr, "ipinfo", "i", "https://ip.b612.me/{ip}/detail", "自定义ip信息查询地址")
|
|
|
|
|
CmdNetTrace.Flags().IntVarP(&timeout, "timeout", "t", 800, "超时时间,单位毫秒")
|
|
|
|
|
CmdNetTrace.Flags().IntVarP(&maxHop, "max-hop", "m", 32, "最大跳数")
|
|
|
|
|
CmdNetTrace.Flags().BoolVarP(&disableIpInfo, "disable-ipinfo", "D", false, "禁用ip信息查询")
|
|
|
|
|
Cmd.AddCommand(CmdNetTrace)
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var CmdNatClient = &cobra.Command{
|
|
|
|
|
Use: "natc",
|
|
|
|
|
Short: "nat穿透客户端",
|
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
|
if natc.ServiceTarget == "" || natc.CmdTarget == "" {
|
|
|
|
|
cmd.Help()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
natc.Run()
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var CmdNatServer = &cobra.Command{
|
|
|
|
|
Use: "nats",
|
|
|
|
|
Short: "nat穿透服务端",
|
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
|
|
|
|
|
|
nats.Run()
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var CmdNetTrace = &cobra.Command{
|
|
|
|
|
Use: "trace",
|
|
|
|
|
Short: "网络路径追踪",
|
|
|
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
|
|
|
if len(args) == 0 {
|
|
|
|
|
cmd.Help()
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if disableIpInfo {
|
|
|
|
|
ipinfoaddr = ""
|
|
|
|
|
}
|
|
|
|
|
for _, target := range args {
|
|
|
|
|
starlog.Infoln("Traceroute to ", target)
|
|
|
|
|
Traceroute(target, dns, maxHop, time.Millisecond*time.Duration(timeout), ipinfoaddr)
|
|
|
|
|
fmt.Println("-----------------------------")
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|