pingtunnel/cmd/main.go

116 lines
3.7 KiB
Go
Raw Normal View History

2018-12-16 08:56:40 +03:00
package main
import (
"flag"
"fmt"
2019-10-25 15:06:13 +03:00
"github.com/esrrhs/go-engine/src/loggo"
2018-12-18 10:47:45 +03:00
"github.com/esrrhs/pingtunnel"
2019-10-26 15:45:58 +03:00
"strconv"
2018-12-16 08:56:40 +03:00
)
var usage = `
2018-12-18 10:36:59 +03:00
通过伪造ping把udp流量通过远程服务器转发到目的服务器上用于突破某些运营商封锁UDP流量
By forging ping, the udp traffic is forwarded to the destination server through the remote server. Used to break certain operators to block UDP traffic.
2018-12-16 08:56:40 +03:00
Usage:
2018-12-18 06:39:16 +03:00
pingtunnel -type server
2018-12-16 08:56:40 +03:00
2018-12-18 10:36:59 +03:00
pingtunnel -type client -l LOCAL_IP:4455 -s SERVER_IP -t SERVER_IP:4455
-type 服务器或者客户端
client or server
-l 本地的地址发到这个端口的流量将转发到服务器
Local address, traffic sent to this port will be forwarded to the server
-s 服务器的地址流量将通过隧道转发到这个服务器
The address of the server, the traffic will be forwarded to this server through the tunnel
-t 远端服务器转发的目的地址流量将转发到这个地址
Destination address forwarded by the remote server, traffic will be forwarded to this address
2018-12-16 08:56:40 +03:00
2018-12-19 06:48:48 +03:00
-timeout 本地记录连接超时的时间单位是秒默认60s
The time when the local record connection timed out, in seconds, 60 seconds by default
2019-01-08 05:43:31 +03:00
-key 设置的密码默认0
Set password, default 0
2019-10-16 16:09:21 +03:00
-tcp 设置是否转发tcp默认false
Set the switch to forward tcp, the default is false
2019-10-25 15:04:52 +03:00
-tcp_bs tcp的发送接收缓冲区大小默认1MB
Tcp send and receive buffer size, default 1MB
2019-10-26 14:54:49 +03:00
-tcp_mw tcp的最大窗口默认10000
2019-10-26 15:02:37 +03:00
The maximum window of tcp, the default is 10000
2019-10-25 15:04:52 +03:00
2019-10-26 14:54:49 +03:00
-tcp_rst tcp的超时发送时间默认400ms
Tcp timeout resend time, default 400ms
2018-12-16 08:56:40 +03:00
`
func main() {
2018-12-18 10:36:59 +03:00
t := flag.String("type", "", "client or server")
listen := flag.String("l", "", "listen addr")
target := flag.String("t", "", "target addr")
server := flag.String("s", "", "server addr")
timeout := flag.Int("timeout", 60, "conn timeout")
2019-01-08 05:32:26 +03:00
key := flag.Int("key", 0, "key")
2019-10-20 11:27:03 +03:00
tcpmode := flag.Int("tcp", 0, "tcp mode")
2019-10-25 15:04:52 +03:00
tcpmode_buffersize := flag.Int("tcp_bs", 1024*1024, "tcp mode buffer size")
2019-10-26 15:02:37 +03:00
tcpmode_maxwin := flag.Int("tcp_mw", 10000, "tcp mode max win")
2019-10-26 14:54:49 +03:00
tcpmode_resend_timems := flag.Int("tcp_rst", 400, "tcp mode resend time ms")
2018-12-16 08:56:40 +03:00
flag.Usage = func() {
fmt.Printf(usage)
}
flag.Parse()
2018-12-18 10:36:59 +03:00
if (*t != "client" && *t != "server") || (*t == "client" && (len(*listen) == 0 || len(*target) == 0 || len(*server) == 0)) {
2018-12-16 08:56:40 +03:00
flag.Usage()
return
}
2019-10-26 15:45:58 +03:00
if *tcpmode_maxwin*10 > pingtunnel.FRAME_MAX_ID {
2019-10-26 16:00:15 +03:00
fmt.Println("set tcp win to big, max = " + strconv.Itoa(pingtunnel.FRAME_MAX_ID/10))
2019-10-26 15:45:58 +03:00
return
}
2018-12-16 08:56:40 +03:00
2019-10-26 17:02:10 +03:00
loggo.Ini(loggo.Config{Level: loggo.LEVEL_INFO, Prefix: "pingtunnel", MaxDay: 3})
2019-10-25 15:06:13 +03:00
loggo.Info("start...")
loggo.Info("key %d", *key)
2018-12-16 08:56:40 +03:00
if *t == "server" {
2019-10-26 07:01:30 +03:00
s, err := pingtunnel.NewServer(*key)
2018-12-16 08:56:40 +03:00
if err != nil {
2019-10-25 15:06:13 +03:00
loggo.Error("ERROR: %s", err.Error())
2018-12-16 08:56:40 +03:00
return
}
2019-10-25 15:06:13 +03:00
loggo.Info("Server start")
2018-12-16 08:56:40 +03:00
s.Run()
}
if *t == "client" {
2018-12-18 10:36:59 +03:00
2019-10-25 15:06:13 +03:00
loggo.Info("type %s", *t)
loggo.Info("listen %s", *listen)
loggo.Info("server %s", *server)
loggo.Info("target %s", *target)
2018-12-18 10:36:59 +03:00
2019-10-25 15:42:51 +03:00
if *tcpmode == 0 {
*tcpmode_buffersize = 0
*tcpmode_maxwin = 0
*tcpmode_resend_timems = 0
}
2019-10-25 15:04:52 +03:00
c, err := pingtunnel.NewClient(*listen, *server, *target, *timeout, *key,
*tcpmode, *tcpmode_buffersize, *tcpmode_maxwin, *tcpmode_resend_timems)
2018-12-16 08:56:40 +03:00
if err != nil {
2019-10-25 15:06:13 +03:00
loggo.Error("ERROR: %s", err.Error())
2018-12-16 08:56:40 +03:00
return
}
2019-10-25 15:06:13 +03:00
loggo.Info("Client Listen %s (%s) Server %s (%s) TargetPort %s:", c.Addr(), c.IPAddr(),
2018-12-18 10:36:59 +03:00
c.ServerAddr(), c.ServerIPAddr(), c.TargetAddr())
2018-12-17 10:21:15 +03:00
c.Run()
2018-12-16 08:56:40 +03:00
}
}