Wie simuliere ich Paketverluste auf einem Android-Gerät?

Ich möchte den Paketverlust auf einem gerooteten Android-Gerät simulieren, um zu sehen, wie sich verschiedene Ebenen auf die Qualität des Video-Streamings auswirken. Ich habe netem und iptables ohne Erfolg versucht:

Netz :

# tc qdisc change dev rmnet0 root netem loss 0.1%
tc qdisc change dev rmnet0 root netem loss 0.1%
Android does not support qdisc 'netem'
Garbage instead of arguments "loss ...". Try "tc qdisc help".

Ist das Format falsch oder ist es möglich, Netem-Unterstützung irgendwie hinzuzufügen?

iptables :

# iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP
iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP
iptables v1.3.7: Couldn't find match `statistic'

Try `iptables -h' or 'iptables --help' for more information.

Gibt es eine andere Alternative in Android?

Gute Frage! Mein Gedanke: Alternativ vielleicht mit einem WLAN-Router verbinden und dort die Verbindung drosseln, wenn dein Router Quality of Service oder ähnliches macht?
So ähnlich , hier ist, wie man Pakete auf einem gerooteten Android-Gerät erfasst: vbsteven.be/blog/…
Die Router-Konfiguration ist wahrscheinlich der richtige Weg, und ich habe diese Simulation mithilfe von WANem eingerichtet . Ich hätte jedoch gerne einen tragbaren Weg, der nicht von der Netzwerkkonfiguration oder der Netzwerkschnittstelle abhängig ist. Grundsätzlich möchte ich einen Komponententest durchführen, bei dem ich Videostreaming ausführe, den Paketverlust erhöhe und dasselbe Video erneut ausführe.

Antworten (3)

Da Ihr Gerät gerootet ist, können Sie einen Proxy installieren. Ich habe TransparentProxy verwendet . Richten Sie dann einen Proxy auf einem anderen Computer in Ihrem lokalen Netzwerk ein. Richten Sie TransparentProxy auf diesen Proxy und stellen Sie dann Ihren Proxy auf Drosselung ein. Einige Proxys, die funktionieren könnten, sind CharlesProxy oder Service Capture .

Wenn das nicht funktioniert, können Sie es von der Router-Ebene aus erreichen. Ein Computer, auf dem BSD oder Linux ausgeführt wird, kann als Router fungieren. Oder Sie können sich eine virtuelle Appliance oder eine bootfähige CD besorgen, die das für Sie erledigt.

Es ist möglich, die Netzwerklatenz und -geschwindigkeit mithilfe der Emulatorsteuerungsfunktionen der Standard-Android-Entwicklertools einzustellen.

Wenn Sie Eclipse verwenden: Wählen Sie Window\Open Perspective\DDMS. Auf dem Bildschirm sehen Sie eine Registerkarte namens "Emulator Control". Auf dieser Registerkarte finden Sie die Optionen Geschwindigkeit und Latenz. Die „Telefonieeinstellungen“ ganz oben haben Geschwindigkeits- und Latenzauswahlen.

Es gibt andere Möglichkeiten, diese Einstellungen zu ändern (einschließlich Skripts in Ihrem Emulator-Setup), aber dies ist der einfachste Weg, um auf die Einstellungen zuzugreifen.

Ich würde auf diesen Thread verweisen: https://serverfault.com/questions/201588/configuring-a-router-to-drop-packets-introduce-latency-corrupt-data

Scheint kein Grund zu sein, warum iptables nicht funktionieren sollten.