在iOS设备上使用root权限调用命令行工具

时间:2012-06-25 14:55:21

标签: ios command-line root nstask

我需要在我的越狱iPhone中运行一些东西,例如“ifconfig en0 down”,需要以root权限运行。

虽然我的应用程序是使用cydia安装的并且在root权限下运行,但是我没有办法调用具有相同权限的命令行工具,这些是我尝试过的不同方法:

1.calling system(“ifconfig en0 down”); - >我在xcode的控制台中收到了“许可被拒绝”的通知;

2.使用NSTask直接运行ifconfig,遇到了同样的问题(我从mac osx框架中复制了NSTask.h文件,它可以工作!)。

3.使用bash脚本运行“/ bin / bash”,需要和密码交互,但是当我尝试使用NSPipe与任务交互时,它根本没有响应。

有些代码会是这样的:

NSPipe *p1 = [NSPipe pipe];
[self.task setStandardOutput:p1];

self.output= [p1 fileHandleForReading];

NSPipe *p2 = [NSPipe pipe];
[self.task setStandardInput:p2];

self.input = [p2 fileHandleForWriting];


[self.task launch];

NSLog(@"Launched...");

sleep(1);
[self.input writeData:[@"alpine" dataUsingEncoding:NSASCIIStringEncoding]];
NSLog(@"Password wrote...");

我从xcode的设备控制台下面收到通知......

Jun 25 22:10:30 unknown Demo[653] <Warning>: Launched...
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>: We trust you have received the usual lecture from the local System
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>: Administrator. It usually boils down to these three things:
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>:     #1) Respect the privacy of others.
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>:     #2) Think before you type.
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>:     #3) With great power comes great responsibility.
Jun 25 22:10:30 unknown UIKitApplication:com.newland.Demo[0xefba][653] <Notice>: Password:
Jun 25 22:10:31 unknown Demo[653] <Warning>: Password wrote...

另一个问题是,在NSTask退出之前,前台进程被冻结,我根本无法操作我的应用程序。

我找到了另一个名为visudo的命令行工具,可以让我在没有输入root用户密码的情况下与命令行工具进行交互,但我不想尝试这种方式,因为我需要一切都通过代码。

我想知道的是如何与NSTask创建的进程进行交互,并且make是以root权限运行的,还是有什么办法可以使用root权限运行命令行工具?

非常感谢:)

0 个答案:

没有答案