mirror of
https://github.com/csznet/goForward.git
synced 2025-09-26 19:31:11 +08:00
75 lines
1.9 KiB
Go
75 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"strings"
|
|
"sync"
|
|
|
|
"csz.net/goForward/conf"
|
|
"csz.net/goForward/forward"
|
|
"csz.net/goForward/sql"
|
|
"csz.net/goForward/web"
|
|
)
|
|
|
|
func main() {
|
|
go web.Run()
|
|
if conf.TcpTimeout < 5 {
|
|
conf.TcpTimeout = 5
|
|
}
|
|
// 初始化通道
|
|
conf.Ch = make(chan string)
|
|
forwardList := sql.GetAction()
|
|
if len(forwardList) == 0 {
|
|
//添加测试数据
|
|
testData := conf.ConnectionStats{
|
|
LocalPort: conf.WebPort,
|
|
RemotePort: conf.WebPort,
|
|
RemoteAddr: "127.0.0.1",
|
|
Protocol: "udp",
|
|
}
|
|
sql.AddForward(testData)
|
|
forwardList = sql.GetForwardList()
|
|
}
|
|
var largeStats forward.LargeConnectionStats
|
|
largeStats.Connections = make([]*forward.ConnectionStats, len(forwardList))
|
|
for i := range forwardList {
|
|
connectionStats := &forward.ConnectionStats{
|
|
ConnectionStats: conf.ConnectionStats{
|
|
Id: forwardList[i].Id,
|
|
Protocol: forwardList[i].Protocol,
|
|
LocalPort: forwardList[i].LocalPort,
|
|
RemotePort: forwardList[i].RemotePort,
|
|
RemoteAddr: forwardList[i].RemoteAddr,
|
|
TotalBytes: forwardList[i].TotalBytes,
|
|
},
|
|
TotalBytesOld: forwardList[i].TotalBytes,
|
|
TotalBytesLock: sync.Mutex{},
|
|
}
|
|
|
|
largeStats.Connections[i] = connectionStats
|
|
}
|
|
// 设置 WaitGroup 计数为连接数
|
|
conf.Wg.Add(len(largeStats.Connections))
|
|
// 并发执行多个转发
|
|
for _, stats := range largeStats.Connections {
|
|
go func(s *forward.ConnectionStats) {
|
|
forward.Run(s)
|
|
conf.Wg.Done()
|
|
}(stats)
|
|
}
|
|
conf.Wg.Wait()
|
|
defer close(conf.Ch)
|
|
}
|
|
func init() {
|
|
flag.StringVar(&conf.WebPort, "port", "8889", "Web Port")
|
|
flag.StringVar(&conf.Db, "db", "goForward.db", "Db Path")
|
|
flag.StringVar(&conf.WebIP, "ip", "0.0.0.0", "Web IP")
|
|
flag.StringVar(&conf.WebPass, "pass", "", "Web Password")
|
|
flag.IntVar(&conf.TcpTimeout, "tt", 60, "Tcp Timeout")
|
|
flag.Parse()
|
|
if !strings.HasSuffix(conf.Db, ".db") {
|
|
conf.Db += ".db"
|
|
}
|
|
sql.Once()
|
|
}
|