Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>
This commit is contained in:
@ -4,13 +4,10 @@ import (
|
|||||||
"crypto/sha1"
|
"crypto/sha1"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
|
||||||
"os"
|
"os"
|
||||||
"snail007/proxy/services"
|
"snail007/proxy/services"
|
||||||
"snail007/proxy/services/kcpcfg"
|
"snail007/proxy/services/kcpcfg"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
kcp "github.com/xtaci/kcp-go"
|
kcp "github.com/xtaci/kcp-go"
|
||||||
"golang.org/x/crypto/pbkdf2"
|
"golang.org/x/crypto/pbkdf2"
|
||||||
@ -30,7 +27,7 @@ var (
|
|||||||
//and so on.
|
//and so on.
|
||||||
//if an error occured , errStr will be the error reason
|
//if an error occured , errStr will be the error reason
|
||||||
//if start success, errStr is empty.
|
//if start success, errStr is empty.
|
||||||
func Start(serviceID,serviceArgsStr string) (errStr string) {
|
func Start(serviceID, serviceArgsStr string) (errStr string) {
|
||||||
//define args
|
//define args
|
||||||
tcpArgs := services.TCPArgs{}
|
tcpArgs := services.TCPArgs{}
|
||||||
httpArgs := services.HTTPArgs{}
|
httpArgs := services.HTTPArgs{}
|
||||||
@ -344,7 +341,7 @@ func Start(serviceID,serviceArgsStr string) (errStr string) {
|
|||||||
}
|
}
|
||||||
_, err = services.Run(serviceID)
|
_, err = services.Run(serviceID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Sprintf("run service [%s:%s] fail, ERR:%s",serviceID, serviceName, err)
|
return fmt.Sprintf("run service [%s:%s] fail, ERR:%s", serviceID, serviceName, err)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -352,94 +349,3 @@ func Start(serviceID,serviceArgsStr string) (errStr string) {
|
|||||||
func Stop(serviceID string) {
|
func Stop(serviceID string) {
|
||||||
services.Stop(serviceID)
|
services.Stop(serviceID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func IsRunning(serviceID string) bool {
|
|
||||||
srv := services.GetService(serviceID)
|
|
||||||
if srv == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
typ := "tcp"
|
|
||||||
addr := ""
|
|
||||||
route := ""
|
|
||||||
switch srv.Name {
|
|
||||||
case "http":
|
|
||||||
addr = *srv.Args.(services.HTTPArgs).Local
|
|
||||||
case "socks":
|
|
||||||
addr = *srv.Args.(services.SocksArgs).Local
|
|
||||||
case "sps":
|
|
||||||
addr = *srv.Args.(services.SPSArgs).Local
|
|
||||||
case "tcp":
|
|
||||||
addr = *srv.Args.(services.TCPArgs).Local
|
|
||||||
case "bridge":
|
|
||||||
addr = *srv.Args.(services.MuxBridgeArgs).Local
|
|
||||||
|
|
||||||
case "tbridge":
|
|
||||||
addr = *srv.Args.(services.TunnelBridgeArgs).Local
|
|
||||||
case "server":
|
|
||||||
if len(*srv.Args.(services.MuxServerArgs).Route) > 0 {
|
|
||||||
route = (*srv.Args.(services.MuxServerArgs).Route)[0]
|
|
||||||
}
|
|
||||||
case "tserver":
|
|
||||||
if len(*srv.Args.(services.TunnelServerArgs).Route) > 0 {
|
|
||||||
route = (*srv.Args.(services.TunnelServerArgs).Route)[0]
|
|
||||||
}
|
|
||||||
case "client":
|
|
||||||
case "tclient":
|
|
||||||
case "udp":
|
|
||||||
typ = "udp"
|
|
||||||
}
|
|
||||||
if route != "" {
|
|
||||||
if strings.HasPrefix(route, "udp://") {
|
|
||||||
typ = "udp"
|
|
||||||
}
|
|
||||||
info := strings.TrimPrefix(route, "udp://")
|
|
||||||
info = strings.TrimPrefix(info, "tcp://")
|
|
||||||
_routeInfo := strings.Split(info, "@")
|
|
||||||
addr = _routeInfo[0]
|
|
||||||
}
|
|
||||||
a := strings.Split(addr, ",")
|
|
||||||
if len(a) > 0 {
|
|
||||||
return PortIsAlive(a[0], typ) == ""
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func PortIsAlive(address string, network ...string) string {
|
|
||||||
time.Sleep(time.Second)
|
|
||||||
n := "tcp"
|
|
||||||
if len(network) == 1 {
|
|
||||||
n = network[0]
|
|
||||||
}
|
|
||||||
if n == "tcp" {
|
|
||||||
conn, err := net.DialTimeout(n, address, time.Second)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Sprintf("connect %s is failed!,err:%v\n", address, err)
|
|
||||||
}
|
|
||||||
conn.Close()
|
|
||||||
} else {
|
|
||||||
ip, port, err := net.SplitHostPort(address)
|
|
||||||
if err != nil {
|
|
||||||
return err.Error()
|
|
||||||
}
|
|
||||||
portI, _ := strconv.Atoi(port)
|
|
||||||
dstAddr := &net.UDPAddr{IP: net.ParseIP(ip), Port: portI}
|
|
||||||
conn, err := net.DialUDP(n, &net.UDPAddr{IP: net.IPv4zero, Port: 0}, dstAddr)
|
|
||||||
if err != nil {
|
|
||||||
return err.Error()
|
|
||||||
}
|
|
||||||
conn.SetDeadline(time.Now().Add(time.Millisecond * 200))
|
|
||||||
_, err = conn.Write([]byte{0x00})
|
|
||||||
conn.SetDeadline(time.Now().Add(time.Millisecond * 200))
|
|
||||||
b := make([]byte, 1)
|
|
||||||
_, err = conn.Read(b)
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
if strings.Contains(err.Error(), "refused") {
|
|
||||||
return err.Error()
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
conn.Close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|||||||
@ -15,12 +15,5 @@ func Stop(serviceID *C.char) {
|
|||||||
sdk.Stop(C.GoString(serviceID))
|
sdk.Stop(C.GoString(serviceID))
|
||||||
}
|
}
|
||||||
|
|
||||||
//export IsRunning
|
|
||||||
func IsRunning(serviceID *C.char) C.int {
|
|
||||||
if sdk.IsRunning(C.GoString(serviceID)) {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
func main() {
|
func main() {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user