4

我正在尝试在不同的网络上运行测试。我可以在两个 WiFi 连接之间切换,但我需要知道如何在连接了以太网电缆的 WiFi 上运行测试。

所以基本上,我需要运行 ping 测试来检查机器上的所有网络是否正常工作。连接以太网端口后,它始终在以太网上运行 ping。我想在不同的网络之间切换。我可以在没有连接以太网的 WiFi 连接上执行此操作。

4

5 回答 5

1

您将不得不使用套接字(您可以从 Objective-C 中做到这一点,这不像使用 NSURL 加载资源那么容易)。我记得,如果您通过要使用的接口的 IP 地址绑定到套接字,则使用该套接字意味着您正在使用该网络连接。

于 2013-01-29T20:19:54.973 回答
0

您可能要考虑的另一种选择是使用系统配置框架。

您可以使用SCNetworkSetSetCurrent”之类的功能(将网络集从仅启用 WiFi 的网络更改为仅启用以太网的网络集)。

此外,如果您不打算向公众或通过应用商店发布此应用程序,您可以执行终端/UNIX 命令行操作,例如sudo ifconfigen0 ,以在测试之间向上或向下调整特定界面(例如“ ”)。

于 2013-01-31T07:28:28.530 回答
0

从系统偏好设置中的网络,您可以设置服务顺序...

于 2013-01-29T20:13:11.313 回答
0

您可以尝试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 地址,如上例所示。我希望我会有所帮助。

于 2019-10-04T03:33:03.180 回答
0

您需要编写一个特权工具助手,然后实现一些这样的功能

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") }

于 2021-03-23T13:54:38.897 回答