我试图禁用Wifi,设置socks proxy:ip,port,login:pass然后重新启用wifi。 我试图用
执行此操作NSTask *task = [NSTask new];
[task setLaunchPath:@"/bin/sh"];
[task setArguments:@[@"-c", @"networksetup -setwebproxystate Wi-Fi off"]];
[task launch];
但我不确切知道如何传递多个参数 - 设置socks代理 我不知道如何禁用和启用wifi,代码高于剂量工作,最后一个问题是我如何设置系统密码,不要被问及管理员权限来改变这一点。
答案 0 :(得分:0)
在向上扩展时,将多个参数传递给NSTask是一件麻烦事,例如,将下面的内容传递给带有引号和反斜杠的NSTask以逃避特殊字符,将会失败。
networksetup -getsecurewebproxy Wi-Fi | awk -F ': ' '{ print $2 }' && networksetup -getwebproxy Wi-Fi | awk -F ': ' '{ print $2 }
但是,如果将代码添加到shell脚本中,并使用NSTask运行shell脚本,则不会有问题。
.h file
@property (nonatomic, strong) __block NSTask *buildTask;
@property (nonatomic, strong) NSPipe *outputPipe;
.m file
NSMutableArray *arguments = [[NSMutableArray alloc] init];
[arguments addObject:@"Wi-FI"];
[arguments addObject:@"off"];
//location of script to run
NSString * locationOfScript = [[NSBundle mainBundle] pathForResource:@"wifi" ofType:@"sh"];
self.buildTask = [[NSTask alloc] init];
self.buildTask.launchPath = locationOfScript; //location of wifi script to run
self.buildTask.arguments = arguments;
// Output Handling
self.outputPipe = [[NSPipe alloc] init];
self.buildTask.standardOutput = self.outputPipe;
[[self.outputPipe fileHandleForReading] waitForDataInBackgroundAndNotify];
[self.buildTask launch];
[self.buildTask waitUntilExit];
if ([self ->_buildTask terminationStatus] == 0) {
//Confirms NSTask completes correctly.
}
在xcode项目中创建一个新文件,使用以下内容将其添加到您的项目中。
#!/bin/sh
networksetup -setwebproxystate Wi-Fi off
您将需要使用终端chmod + x wifi.sh,否则您将收到错误(找不到文件)
NSMutableArray的参数将按顺序传递给shell脚本,并且可以通过上面示例中的“$ {1}”作为@“Wi-Fi”进行访问。
关于您的其他问题,您无法绕过管理员密码的要求。 您可以将命令添加到sudoers文件中,并且不会询问密码,但是此方法对于生产应用程序不实用。
对于你的Socks问题,最简单的方法是在项目名称socks.sh中创建一个新文件,你可以使用; [-setsocksfirewallproxy networkservice domain portnumber authenticated username password] [-setsocksfirewallproxystate networkservice on |断]
有关networksetup和可用选项的更多信息,请参阅networksetup手册页(链接如下) [链接] https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/networksetup.8.html