0

我正在编写脚本来管理大量 Android 模拟器,我需要禁用其中一些模拟器上的所有网络流量。因为我在无头服务器上执行所有这些操作,所以我无法使用模拟器文档中描述的 F8 热键。

我目前正在通过使用的空代理路由 TCP 流量emulator-arm ... -http-proxy 0.0.0.0:0,这会阻止我想要的流量。

我认为这运行良好,直到我在运行脚本时注意到一些奇怪的错误消息。控制台开始输出accept too many open files并检查打开的文件,lsof显示大量消息“无法识别协议”

...
emulator- 19463 username   19u     sock                0,6       0t0 1976595845 can't identify protocol
emulator- 19463 username   20u     sock                0,6       0t0 1976595847 can't identify protocol
...

我发现的唯一“解决方案”是杀死所有的模拟器,然后等到再次达到这个限制,这根本不是一个解决方案。

在调用模拟器时还有其他方法可以做到这一点吗?我是否错误地使用-htt-proxy交换机来阻止流量?

其他人通过使用飞机模式手动执行此操作找到了阻止流量的解决方案,但这对我来说是不可行的,因为我正在通过脚本控制模拟器。我可以使用我的脚本将关键事件发送到模拟器并以飞行模式打开手机,但我更喜欢比这更可靠的东西。

编辑:即使我没有通过空路由路由 TCP 流量,我似乎也会收到“无法识别协议”错误,所以我不知道发生了什么。鉴于我的情况,任何人都可以验证这个空路由方法是最好的方法吗?

4

1 回答 1

0

尝试使用 QEMU -net-forward 参数:

$ANDROID_SDK/tools/emulator -avd $AVD_NAME -qemu -net-forward 0.0.0.0:0.0.0.0:80:127.0.0.1:8888

您将需要更新127.0.0.1:8888到您的空代理的地址。

于 2013-05-28T21:37:31.470 回答