我正在尝试在不同的网络上运行测试。我可以在两个 WiFi 连接之间切换,但我需要知道如何在连接了以太网电缆的 WiFi 上运行测试。
所以基本上,我需要运行 ping 测试来检查机器上的所有网络是否正常工作。连接以太网端口后,它始终在以太网上运行 ping。我想在不同的网络之间切换。我可以在没有连接以太网的 WiFi 连接上执行此操作。
我正在尝试在不同的网络上运行测试。我可以在两个 WiFi 连接之间切换,但我需要知道如何在连接了以太网电缆的 WiFi 上运行测试。
所以基本上,我需要运行 ping 测试来检查机器上的所有网络是否正常工作。连接以太网端口后,它始终在以太网上运行 ping。我想在不同的网络之间切换。我可以在没有连接以太网的 WiFi 连接上执行此操作。
您将不得不使用套接字(您可以从 Objective-C 中做到这一点,这不像使用 NSURL 加载资源那么容易)。我记得,如果您通过要使用的接口的 IP 地址绑定到套接字,则使用该套接字意味着您正在使用该网络连接。
您可能要考虑的另一种选择是使用系统配置框架。
您可以使用“ SCNetworkSetSetCurrent
”之类的功能(将网络集从仅启用 WiFi 的网络更改为仅启用以太网的网络集)。
此外,如果您不打算向公众或通过应用商店发布此应用程序,您可以执行终端/UNIX 命令行操作,例如“ sudo ifconfig
”en0
,以在测试之间向上或向下调整特定界面(例如“ ”)。
从系统偏好设置中的网络,您可以设置服务顺序...
您可以尝试GCDAsyncSocket。您将需要更改与套接字的连接。在所有示例的 HTTPServer.m 文件中,您会发现:
// By default bind on all available interfaces, en1, wifi etc
interface = @"192.168.2.1";
// Use a default port of 0
// This will allow the kernel to automatically pick an open port for us
port = 40000;
您可以将接口设置为 en0、en1 等,也可以直接使用接口的 IP 地址,如上例所示。我希望我会有所帮助。
您需要编写一个特权工具助手,然后实现一些这样的功能
func setNetworkLocation(newLocation : String,reply: @escaping (String) -> Void){
var retVal : Bool = false
var response = ""
var prefs : SCPreferences
prefs = SCPreferencesCreate (nil, "Softech" as CFString, nil)!
var sets : CFArray
sets = SCNetworkSetCopyAll (prefs)!
let count = CFArrayGetCount(sets)
var newSet : SCNetworkSet? = nil
var bFound : Bool = false
for nIndex in 0..<count {
let mySet = CFArrayGetValueAtIndex (sets, nIndex)
let key = Unmanaged<SCNetworkSet>.fromOpaque(mySet!)
newSet = key.takeUnretainedValue()
let name : String = SCNetworkSetGetName(newSet!)! as String
if(name == newLocation){
bFound = true
break
}
print("Name: \(name) cerco \(newLocation)")
}
if(bFound){
print("Trovata netwok location da impostare Name: \(newLocation)")
retVal = SCNetworkSetSetCurrent (newSet!)
print ("SCNetworkSetSetCurrent = \(retVal) ");
retVal = SCPreferencesCommitChanges (prefs);
print ("SCPreferencesCommitChanges = \(retVal) ")
response = "setNetworkLocation: SCPreferencesCommitChanges = [\(retVal)] " + newLocation
}else{
response = "setNetworkLocation: Not found network location named [" + newLocation + "]"
}
reply(response)
}
从应用程序客户端使用
func setNetworkLocation(name: String){
let xpcService = prepareXPC()?.remoteObjectProxyWithErrorHandler() { error -> Void in
NSLog("XPC error: \(error)")
} as? RemoteProcessProtocol
xpcService?.setNetworkLocation(newLocation:name , reply: { [self]
responseInfo in
NSLog("\(name): FGLanSelectionHelper setNetworkLocation response => \(responseInfo)")
})
}
@IBAction func btnSetNetworkLocation(_ sender: Any) { setNetworkLocation(name: "MyOffice") }