check port before turn v2ray-core on

This commit is contained in:
yanue 2020-03-02 01:26:17 +08:00
parent ca9cb03f16
commit 8577c414a1
5 changed files with 77 additions and 8 deletions

BIN
Build/V2rayUPort Executable file

Binary file not shown.

View File

@ -35,6 +35,7 @@
66973EB721797719001FEA1E /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66973EB621797719001FEA1E /* ServiceManagement.framework */; };
66ACB1A021757D5B005B5881 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66ACB19F21757D5B005B5881 /* MainMenu.swift */; };
66BC2B89228C589E00FBB716 /* V2raySubscribe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66BC2B88228C589E00FBB716 /* V2raySubscribe.swift */; };
66C5B199240C1EF7008A22CA /* V2rayUPort in CopyFiles */ = {isa = PBXBuildFile; fileRef = 66C5B198240C1EEE008A22CA /* V2rayUPort */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
66F07CF9236D79540088A4AE /* ping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66F07CF8236D79540088A4AE /* ping.swift */; };
66F302A522AAA1D400FCA4E2 /* V2rayUTool in CopyFiles */ = {isa = PBXBuildFile; fileRef = 66F3029922AA9C0900FCA4E2 /* V2rayUTool */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
66F411B121CA49EE007AAC10 /* pac in Copy Files */ = {isa = PBXBuildFile; fileRef = 6683B1EA21C2AD1A004A1C5F /* pac */; };
@ -87,6 +88,7 @@
dstPath = "";
dstSubfolderSpec = 7;
files = (
66C5B199240C1EF7008A22CA /* V2rayUPort in CopyFiles */,
66F302A522AAA1D400FCA4E2 /* V2rayUTool in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -176,6 +178,8 @@
66ACB19F21757D5B005B5881 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = "<group>"; };
66BC2B88228C589E00FBB716 /* V2raySubscribe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = V2raySubscribe.swift; sourceTree = "<group>"; };
66C5B194240B58B8008A22CA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = ../en.lproj/PreferenceAdvance.strings; sourceTree = "<group>"; };
66C5B197240C17F2008A22CA /* main.go */ = {isa = PBXFileReference; lastKnownFileType = text; path = main.go; sourceTree = "<group>"; };
66C5B198240C1EEE008A22CA /* V2rayUPort */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = V2rayUPort; sourceTree = "<group>"; };
66F07CF8236D79540088A4AE /* ping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ping.swift; sourceTree = "<group>"; };
66F3029922AA9C0900FCA4E2 /* V2rayUTool */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = V2rayUTool; sourceTree = "<group>"; };
66F3029C22AAA0A600FCA4E2 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
@ -284,6 +288,7 @@
isa = PBXGroup;
children = (
6646669221CBC0860094F0B7 /* main.swift */,
66C5B197240C17F2008A22CA /* main.go */,
);
path = V2rayUTool;
sourceTree = "<group>";
@ -352,6 +357,7 @@
66FEAD44217D75D7009DECF9 /* Build */ = {
isa = PBXGroup;
children = (
66C5B198240C1EEE008A22CA /* V2rayUPort */,
66F3029922AA9C0900FCA4E2 /* V2rayUTool */,
664FC05321A70C4300048FE3 /* build.plist */,
66FEAD45217D75FC009DECF9 /* release.sh */,

View File

@ -253,10 +253,9 @@ class MenuController: NSObject, NSMenuDelegate {
// start v2ray core
func startV2rayCore() {
self.setStatusOff()
NSLog("start v2ray-core begin")
if !V2rayLaunch.checkPorts() {
setStatusOff()
return
}

View File

@ -182,8 +182,15 @@ class V2rayLaunch: NSObject {
}
static func checkPorts() -> Bool {
// stop old v2ray process
self.Stop()
// stop pac server
webServer.stop()
let localSockPort = UserDefaults.get(forKey: .localSockPort) ?? "1080"
let localSockHost = UserDefaults.get(forKey: .localSockHost) ?? "127.0.0.1"
let localHttpPort = UserDefaults.get(forKey: .localHttpPort) ?? "1087"
let localHttpHost = UserDefaults.get(forKey: .localHttpHost) ?? "127.0.0.1"
let localPacPort = UserDefaults.get(forKey: .localPacPort) ?? "11085"
// check same port
@ -203,13 +210,31 @@ class V2rayLaunch: NSObject {
}
// check port is used
print("UInt16(localSockPort)", UInt16(localSockPort) ?? 0)
// let (res, err) = self.checkTcpPort(port: UInt16(localSockPort) ?? 0)
// if !res {
// makeToast(message: "the sock port (" + localSockPort + ") has being used: (" + err + ")", displayDuration: 3)
// return false
// }
if !self.checkPort(host: localSockHost, port: localSockPort, tip: "socks") {
return false
}
if !self.checkPort(host: localHttpHost, port: localHttpPort, tip: "http") {
return false
}
if !self.checkPort(host: "0.0.0.0", port: localPacPort, tip: "pac") {
return false
}
// restart pac http server
startHttpServer()
return true
}
static func checkPort(host: String, port: String, tip: String) -> Bool {
// shell("/bin/bash",["-c","cd ~ && ls -la"])
let res = shell(launchPath: "/bin/bash", arguments: ["-c", "cd " + AppResourcesPath + " && ./V2rayUPort -h " + host + " -p " + port])
if res != "ok" {
makeToast(message: tip + " error: " + (res ?? ""), displayDuration: 5)
return false
}
return true
}

39
V2rayUTool/main.go Normal file
View File

@ -0,0 +1,39 @@
/**
* Created by GoLand.
* User: yanue
* Date: 2019/2/28
* Time: 17:34
*/
package main
import (
"flag"
"fmt"
"net"
)
var host = ""
var port = ""
func init() {
flag.StringVar(&host, "h", "", "-h host")
flag.StringVar(&port, "p", "", "-p port")
flag.Parse()
}
const help = "V2rayUPort - check port is free \nUsage: \n V2rayUPort -h host -p port"
func main() {
if len(host) == 0 || len(port) == 0 {
fmt.Println(help)
return
}
_, err := net.Listen("tcp", host+":"+port)
if err != nil {
fmt.Println("err:", err.Error())
return
}
fmt.Println("ok")
}