From 66133d6cbb9807ee7b035cdd50cdb337e36be989 Mon Sep 17 00:00:00 2001 From: ffdfgdfg Date: Wed, 12 Feb 2020 16:22:56 +0800 Subject: [PATCH 1/9] update docs --- docs/use.md | 2 ++ docs/windows_client_service_configuration.png | Bin 0 -> 26164 bytes 2 files changed, 2 insertions(+) create mode 100644 docs/windows_client_service_configuration.png diff --git a/docs/use.md b/docs/use.md index 32c26bd..53b15c3 100644 --- a/docs/use.md +++ b/docs/use.md @@ -17,6 +17,8 @@ - 启动:`npc.exe start` - 停止:`npc.exe stop` - 如果需要更换命令内容需要先卸载`npc.exe uninstall`,再重新注册 +- 如果需要当客户端退出时自动重启客户端,请按照如图所示配置 +![image](https://github.com/ehang-io/nps/blob/master/docs/windows_client_service_configuration.png?raw=true) 注册到服务后,日志文件windows位于当前目录下,linux和darwin位于/var/log/npc.log diff --git a/docs/windows_client_service_configuration.png b/docs/windows_client_service_configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..0a1d2c0ea95bc3e1d5455cb900d61783a3a86567 GIT binary patch literal 26164 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 literal 0 HcmV?d00001 From 8a04e17631d8eea1004fe8573f390e84461f1ed4 Mon Sep 17 00:00:00 2001 From: cnlh Date: Thu, 13 Feb 2020 17:52:49 +0800 Subject: [PATCH 2/9] change md --- docs/run.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/run.md b/docs/run.md index 805e154..ca1f323 100644 --- a/docs/run.md +++ b/docs/run.md @@ -26,7 +26,9 @@ ## 客户端 - 下载客户端安装包并解压,进入到解压目录 - 点击web管理中客户端前的+号,复制启动命令 -- 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用cmd执行 +- 执行启动命令,linux直接执行即可,windows将./npc换成npc.exe用**cmd执行** + +如果使用`powershell`运行,**请将ip括起来!** 如果需要注册到系统服务可查看[注册到系统服务](/use?id=注册到系统服务) From acb4e50ee7b2926806a8ee8597528095bd9dae19 Mon Sep 17 00:00:00 2001 From: yzy613 <59520517+yzy613@users.noreply.github.com> Date: Fri, 14 Feb 2020 08:42:59 -0600 Subject: [PATCH 3/9] Update p2p tips (#408) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update example.md 新增p2p防火墙端口开放范围 * Update faq.md * Update faq.md 添加p2p引导 Co-authored-by: ffdfgdfg --- docs/example.md | 1 + docs/faq.md | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/docs/example.md b/docs/example.md index 2da0b87..141c219 100644 --- a/docs/example.md +++ b/docs/example.md @@ -108,6 +108,7 @@ **使用步骤** - 在`nps.conf`中设置`p2p_ip`(nps服务器ip)和`p2p_port`(nps服务器udp端口) +> 注:若 `p2p_port` 设置为6000,请在防火墙开放6000~6002(额外添加2个端口)udp端口 - 在刚才刚才创建的客户端中添加一条p2p代理,并设置唯一密钥p2pssh - 在使用端机器(本机)执行命令 diff --git a/docs/faq.md b/docs/faq.md index a8efdcf..424e6db 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -14,3 +14,7 @@ ``` install 之后,Linux 配置文件在 /etc/nps ``` +- p2p穿透失败 [p2p服务](https://ehang-io.github.io/nps/#/example?id=p2p%e6%9c%8d%e5%8a%a1) +``` +双方nat类型都是Symmetric Nat一定不成功,建议先查看nat类型。请按照文档操作(标题上有超链接) +``` From 26f48aa7f13342f4dddeea7ef276aec8ccc4efdc Mon Sep 17 00:00:00 2001 From: cnlh Date: Sun, 16 Feb 2020 20:42:36 +0800 Subject: [PATCH 4/9] close client connection when tcp lost connection in socks5 --- server/proxy/socks5.go | 1 + 1 file changed, 1 insertion(+) diff --git a/server/proxy/socks5.go b/server/proxy/socks5.go index f2ee2d5..3faefe5 100755 --- a/server/proxy/socks5.go +++ b/server/proxy/socks5.go @@ -270,6 +270,7 @@ func (s *Sock5ModeServer) handleUDP(c net.Conn) { b := common.BufPoolUdp.Get().([]byte) defer common.BufPoolUdp.Put(b) + defer target.Close() for { _, err := c.Read(b) if err != nil { From d3915e3b6da0a3f9e1dca6f44f2e23b4b5014e02 Mon Sep 17 00:00:00 2001 From: ffdfgdfg Date: Mon, 17 Feb 2020 00:16:34 +0800 Subject: [PATCH 5/9] bump mux version --- go.mod | 9 +++++---- go.sum | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index c43c98c..f8b0288 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module ehang.io/nps go 1.13 require ( - ehang.io/nps-mux v0.0.0-20200116160632-de59baca47b5 + ehang.io/nps-mux v0.0.0-20200216160218-8928a6177bac fyne.io/fyne v1.2.2 github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/astaxie/beego v1.12.0 @@ -15,15 +15,16 @@ require ( github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db github.com/hooklift/assert v0.0.0-20170704181755-9d1defd6d214 // indirect github.com/kardianos/service v1.0.0 + github.com/klauspost/cpuid v1.2.3 // indirect github.com/klauspost/pgzip v1.2.1 // indirect github.com/panjf2000/ants/v2 v2.3.0 github.com/pkg/errors v0.9.1 github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect github.com/shirou/gopsutil v2.19.11+incompatible github.com/xtaci/kcp-go v5.4.20+incompatible - golang.org/x/crypto v0.0.0-20200117160349-530e935923ad // indirect - golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa - golang.org/x/sys v0.0.0-20200117145432-59e60aa80a0c // indirect + golang.org/x/crypto v0.0.0-20200214034016-1d94cc7ab1c6 // indirect + golang.org/x/net v0.0.0-20200202094626-16171245cfb2 + golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 // indirect ) replace github.com/astaxie/beego => github.com/exfly/beego v1.12.0-export-init diff --git a/go.sum b/go.sum index d4dd951..f9a87ed 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -ehang.io/nps-mux v0.0.0-20200116160632-de59baca47b5 h1:gbYMN0t1mroAtodN9t7rFRqAYtBGQpqjPNaJ/zFGmD8= -ehang.io/nps-mux v0.0.0-20200116160632-de59baca47b5/go.mod h1:v2gdtoMBRGYe5y9mSBwPw6V4V/2Zz5GyTuCNlsUPHkY= +ehang.io/nps-mux v0.0.0-20200216160218-8928a6177bac h1:tNbuf7od+Y/8KfpzhxhJRIROS+CKNG0pJXR3kSmujXs= +ehang.io/nps-mux v0.0.0-20200216160218-8928a6177bac/go.mod h1:v2gdtoMBRGYe5y9mSBwPw6V4V/2Zz5GyTuCNlsUPHkY= fyne.io/fyne v1.2.2 h1:mf7EseASp3CAC5vLWVPLnsoKxvp/ARdu3Seh0HvAQak= fyne.io/fyne v1.2.2/go.mod h1:Ab+3DIB/FVteW0y4DXfmZv4N3JdnCBh2lHkINI02BOU= github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -62,6 +62,8 @@ github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.2 h1:1xAgYebNnsb9LKCdLOvFWtAxGU/33mjJtyOVbmUa0Us= github.com/klauspost/cpuid v1.2.2/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= +github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/pgzip v1.2.1 h1:oIPZROsWuPHpOdMVWLuJZXwgjhrW8r1yEX8UqMyeNHM= github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/klauspost/reedsolomon v1.9.3 h1:N/VzgeMfHmLc+KHMD1UL/tNkfXAt8FnUqlgXGIduwAY= @@ -120,8 +122,8 @@ golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85 h1:et7+NAX3lLIk5qUCTA9Qel golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad h1:Jh8cai0fqIK+f6nG0UgPW5wFk8wmiMhM3AyciDBdtQg= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200214034016-1d94cc7ab1c6 h1:Sy5bstxEqwwbYs6n0/pBuxKENqOeZUgD45Gp3Q3pqLg= +golang.org/x/crypto v0.0.0-20200214034016-1d94cc7ab1c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8 h1:idBdZTd9UioThJp8KpM/rTSinK/ChZFBE43/WtIy8zg= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= @@ -132,15 +134,15 @@ golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCc golang.org/x/net v0.0.0-20181114220301-adae6a3d119a h1:gOpx8G595UYyvj8UK4+OFyY4rx037g3fmfhe5SasG3U= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200117145432-59e60aa80a0c h1:gUYreENmqtjZb2brVfUas1sC6UivSY8XwKwPo8tloLs= -golang.org/x/sys v0.0.0-20200117145432-59e60aa80a0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= From 1fec6c3649144c5c076c846a2a0ae3ba63826ad1 Mon Sep 17 00:00:00 2001 From: ffdfgdfg Date: Mon, 17 Feb 2020 00:31:39 +0800 Subject: [PATCH 6/9] bump version to v0.26.3 --- build.sh | 2 +- docs/_coverpage.md | 2 +- gui/npc/AndroidManifest.xml | 2 +- lib/version/version.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.sh b/build.sh index b67091b..eeaf1b8 100755 --- a/build.sh +++ b/build.sh @@ -1,5 +1,5 @@ #/bash/sh -export VERSION=0.26.2 +export VERSION=0.26.3 sudo apt-get install gcc-mingw-w64-i686 env GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -ldflags "-s -w -extldflags -static -extldflags -static" -buildmode=c-shared -o npc_sdk.dll cmd/npc/sdk.go diff --git a/docs/_coverpage.md b/docs/_coverpage.md index 17d1b60..f055839 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -1,6 +1,6 @@ ![logo](logo.svg) -# NPS 0.26.2 +# NPS 0.26.3 > 一款轻量级、高性能、功能强大的内网穿透代理服务器 diff --git a/gui/npc/AndroidManifest.xml b/gui/npc/AndroidManifest.xml index 6e6f2d7..8b91063 100755 --- a/gui/npc/AndroidManifest.xml +++ b/gui/npc/AndroidManifest.xml @@ -2,7 +2,7 @@ diff --git a/lib/version/version.go b/lib/version/version.go index b7b9f20..3fbde4b 100644 --- a/lib/version/version.go +++ b/lib/version/version.go @@ -1,6 +1,6 @@ package version -const VERSION = "0.26.2" +const VERSION = "0.26.3" // Compulsory minimum version, Minimum downward compatibility to this version func GetVersion() string { From 05c27b93652f57833ae08620e244ec3fecc61db5 Mon Sep 17 00:00:00 2001 From: cnlh Date: Mon, 17 Feb 2020 02:30:34 +0800 Subject: [PATCH 7/9] fix:udp buf --- server/proxy/udp.go | 59 ++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/server/proxy/udp.go b/server/proxy/udp.go index fa3d0be..e89259a 100755 --- a/server/proxy/udp.go +++ b/server/proxy/udp.go @@ -1,8 +1,11 @@ package proxy import ( + "io" "net" "strings" + "sync" + "time" "ehang.io/nps/bridge" "ehang.io/nps/lib/common" @@ -13,6 +16,7 @@ import ( type UdpModeServer struct { BaseServer + addrMap sync.Map listener *net.UDPConn } @@ -33,8 +37,8 @@ func (s *UdpModeServer) Start() error { if err != nil { return err } - buf := common.BufPoolUdp.Get().([]byte) for { + buf := common.BufPoolUdp.Get().([]byte) n, addr, err := s.listener.ReadFromUDP(buf) if err != nil { if strings.Contains(err.Error(), "use of closed network connection") { @@ -49,28 +53,43 @@ func (s *UdpModeServer) Start() error { } func (s *UdpModeServer) process(addr *net.UDPAddr, data []byte) { - if err := s.CheckFlowAndConnNum(s.task.Client); err != nil { - logs.Warn("client id %d, task id %d,error %s, when udp connection", s.task.Client.Id, s.task.Id, err.Error()) - return - } - defer s.task.Client.AddConn() - link := conn.NewLink(common.CONN_UDP, s.task.Target.TargetStr, s.task.Client.Cnf.Crypt, s.task.Client.Cnf.Compress, addr.String(), s.task.Target.LocalProxy) - if clientConn, err := s.bridge.SendLinkInfo(s.task.Client.Id, link, s.task); err != nil { - return + if v, ok := s.addrMap.Load(addr.String()); ok { + clientConn, ok := v.(io.ReadWriteCloser) + if ok { + clientConn.Write(data) + s.task.Flow.Add(int64(len(data)), 0) + } } else { - target := conn.GetConn(clientConn, s.task.Client.Cnf.Crypt, s.task.Client.Cnf.Compress, nil, true) - defer target.Close() - s.task.Flow.Add(int64(len(data)), 0) - buf := common.BufPoolUdp.Get().([]byte) - defer common.BufPoolUdp.Put(buf) - target.Write(data) - s.task.Flow.Add(int64(len(data)), 0) - if n, err := target.Read(buf); err != nil { - logs.Warn(err) + if err := s.CheckFlowAndConnNum(s.task.Client); err != nil { + logs.Warn("client id %d, task id %d,error %s, when udp connection", s.task.Client.Id, s.task.Id, err.Error()) + return + } + defer s.task.Client.AddConn() + link := conn.NewLink(common.CONN_UDP, s.task.Target.TargetStr, s.task.Client.Cnf.Crypt, s.task.Client.Cnf.Compress, addr.String(), s.task.Target.LocalProxy) + if clientConn, err := s.bridge.SendLinkInfo(s.task.Client.Id, link, s.task); err != nil { return } else { - s.listener.WriteTo(buf[:n], addr) - s.task.Flow.Add(0, int64(n)) + target := conn.GetConn(clientConn, s.task.Client.Cnf.Crypt, s.task.Client.Cnf.Compress, nil, true) + s.addrMap.Store(addr.String(), target) + defer target.Close() + + target.Write(data) + + buf := common.BufPoolUdp.Get().([]byte) + defer common.BufPoolUdp.Put(buf) + + s.task.Flow.Add(int64(len(data)), 0) + for { + clientConn.SetReadDeadline(time.Now().Add(time.Minute * 10)) + if n, err := target.Read(buf); err != nil { + s.addrMap.Delete(addr.String()) + logs.Warn(err) + return + } else { + s.listener.WriteTo(buf[:n], addr) + s.task.Flow.Add(0, int64(n)) + } + } } } } From 876d3ccc6fc2cbfb76e751a2f795bf68b4decdc6 Mon Sep 17 00:00:00 2001 From: ffdfgdfg Date: Tue, 18 Feb 2020 19:45:11 +0800 Subject: [PATCH 8/9] change file storage, fix #412 --- lib/file/file.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/file/file.go b/lib/file/file.go index 9e28e95..0bcf61c 100644 --- a/lib/file/file.go +++ b/lib/file/file.go @@ -99,16 +99,28 @@ func (s *JsonDb) GetClient(id int) (c *Client, err error) { return } +var hostLock sync.Mutex + func (s *JsonDb) StoreHostToJsonFile() { + hostLock.Lock() storeSyncMapToFile(s.Hosts, s.HostFilePath) + hostLock.Unlock() } +var taskLock sync.Mutex + func (s *JsonDb) StoreTasksToJsonFile() { + taskLock.Lock() storeSyncMapToFile(s.Tasks, s.TaskFilePath) + taskLock.Unlock() } +var clientLock sync.Mutex + func (s *JsonDb) StoreClientsToJsonFile() { + clientLock.Lock() storeSyncMapToFile(s.Clients, s.ClientFilePath) + clientLock.Unlock() } func (s *JsonDb) GetClientId() int32 { @@ -134,7 +146,8 @@ func loadSyncMapFromFile(filePath string, f func(value string)) { } func storeSyncMapToFile(m sync.Map, filePath string) { - file, err := os.Create(filePath) + file, err := os.Create(filePath + ".tmp") + // first create a temporary file to store if err != nil { panic(err) } @@ -177,5 +190,7 @@ func storeSyncMapToFile(m sync.Map, filePath string) { } return true }) - file.Sync() + _ = file.Sync() + err = os.Rename(filePath+".tmp", filePath) + // replace the file, maybe provides atomic operation } From 3ec790d98d9a04fb6b2f16a2b55a8aef00b0cec7 Mon Sep 17 00:00:00 2001 From: ffdfgdfg Date: Tue, 18 Feb 2020 22:53:37 +0800 Subject: [PATCH 9/9] run without service #407 --- cmd/npc/npc.go | 24 +++++++++++++++++------- cmd/nps/nps.go | 36 +++++++++++++++++++++++------------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/cmd/npc/npc.go b/cmd/npc/npc.go index 781dc1f..67c1254 100644 --- a/cmd/npc/npc.go +++ b/cmd/npc/npc.go @@ -15,6 +15,7 @@ import ( "os" "runtime" "strings" + "sync" "time" ) @@ -107,7 +108,12 @@ func main() { } s, err := service.New(prg, svcConfig) if err != nil { - logs.Error(err) + logs.Error(err, "service function disabled") + run() + // run without service + wg := sync.WaitGroup{} + wg.Add(1) + wg.Wait() return } if len(os.Args) >= 2 { @@ -172,6 +178,15 @@ func (p *npc) run() error { logs.Warning("npc: panic serving %v: %v\n%s", err, string(buf)) } }() + run() + select { + case <-p.exit: + logs.Warning("stop...") + } + return nil +} + +func run() { common.InitPProfFromArg(*pprofAddr) //p2p or secret command if *password != "" { @@ -187,7 +202,7 @@ func (p *npc) run() error { commonConfig.Client = new(file.Client) commonConfig.Client.Cnf = new(file.Config) go client.StartLocalServer(localServer, commonConfig) - return nil + return } env := common.GetEnvMap() if *serverAddr == "" { @@ -211,9 +226,4 @@ func (p *npc) run() error { } go client.StartFromFile(*configPath) } - select { - case <-p.exit: - logs.Warning("stop...") - } - return nil } diff --git a/cmd/nps/nps.go b/cmd/nps/nps.go index 93640ae..7746db7 100644 --- a/cmd/nps/nps.go +++ b/cmd/nps/nps.go @@ -1,26 +1,27 @@ package main import ( + "ehang.io/nps/lib/crypt" + "ehang.io/nps/lib/file" "ehang.io/nps/lib/install" + "ehang.io/nps/lib/version" + "ehang.io/nps/server" + "ehang.io/nps/server/connection" + "ehang.io/nps/server/tool" + "ehang.io/nps/web/routers" "flag" "log" "os" "path/filepath" "runtime" "strings" + "sync" "ehang.io/nps/lib/common" - "ehang.io/nps/lib/crypt" "ehang.io/nps/lib/daemon" - "ehang.io/nps/lib/file" - "ehang.io/nps/lib/version" - "ehang.io/nps/server" - "ehang.io/nps/server/connection" - "ehang.io/nps/server/tool" "github.com/astaxie/beego" "github.com/astaxie/beego/logs" - "ehang.io/nps/web/routers" "github.com/kardianos/service" ) @@ -97,7 +98,12 @@ func main() { prg.exit = make(chan struct{}) s, err := service.New(prg, svcConfig) if err != nil { - logs.Error(err) + logs.Error(err, "service function disabled") + run() + // run without service + wg := sync.WaitGroup{} + wg.Add(1) + wg.Wait() return } if len(os.Args) > 1 && os.Args[1] != "service" { @@ -166,6 +172,15 @@ func (p *nps) run() error { logs.Warning("nps: panic serving %v: %v\n%s", err, string(buf)) } }() + run() + select { + case <-p.exit: + logs.Warning("stop...") + } + return nil +} + +func run() { routers.Init() task := &file.Tunnel{ Mode: "webServer", @@ -181,9 +196,4 @@ func (p *nps) run() error { tool.InitAllowPort() tool.StartSystemInfo() go server.StartNewServer(bridgePort, task, beego.AppConfig.String("bridge_type")) - select { - case <-p.exit: - logs.Warning("stop...") - } - return nil }