Android iperf3 in einer eigen Android App

missy72

Bekanntes Mitglied
Hallo zusammen,

wer kann mir helfen ? Ich möchte eine Android App bauen, mit der Möglichkeit einen iperf3- Befehl einzugeben und die Ausgabe später in eine Datei abzuspeichern, aber das ist nebensächlich. Ich habe es direkt, mit einer Binärdatei und auch über eine Brücke oder API mit der Termux-App probiert. Egal was ich versuche grundsätzlich bekomme ich die Fehlermeldung, dass ich für die Verzeichnisse, beziehungsweise auf die Binärdatei keine Rechte habe.
Bitte beachten es geht explizit um eine Android App und ich möchte das Gerät nicht rooten müssen.

Vielen Dank schonmal im Voraus.
MfG Maik
 

Robert Zenz

Top Contributor
Muss es per Kommandozeile sein? Eventuell waere ein Knopf in der Oberflaeche der App einfacher?

Ich glaube naemlich das dem Ausfuehren auf der Kommandozeile diverse Verhaltensweisen von Android selbst im Weg stehen.
 

Jw456

Top Contributor
Was genau hast du denn in der Kommandozeile eingeben wollen?
Ist die Bin dadei auch eine ausführbare dadei für Android.
 

missy72

Bekanntes Mitglied
Vielleicht habe ich mich falsch ausgedrückt. Ich will schon, dass meine App intern den Befehl durchführt.
Der Befehl soll später in drei verschieden Varianten von der App ausgeführt werden. Keine Eingabe vom User nötig.
Sonst könnte ich ja gleich die Termux App verwenden.
Problem ist, egal was ich versuche, Android mir die Rechte verwehrt aus meiner App einen IPERF3 Befehl auszuführen.
Wiederrum eine PING auszuführen ist keine Problem.
Lösungsansätze waren eine Binärdatei von IPERF3 zu verwenden, oder über die Termux-API.
Was beides zur der Fehlermeldung führt, dass der Iperf3 Befehl keine Rechte hat um ausgeführst zu werden.


Java:
    private fun executeIperf3ViaTermuxAPI(serverAddress: String, port: Int) {
        val intent = Intent("com.termux.RUN_COMMAND")
        intent.setPackage("com.termux")
        intent.putExtra("com.termux.RUN_COMMAND_PATH", "/data/data/com.termux/files/usr/bin/iperf3")
        intent.putExtra(
            "com.termux.RUN_COMMAND_ARGUMENTS",
            arrayOf("-c", serverAddress, "-p", port.toString())
        )
        intent.putExtra("com.termux.RUN_COMMAND_BACKGROUND", false)

        try {
            startActivity(intent)
        } catch (e: Exception) {
            Log.e("TERMUX_API", "Fehler beim Ausführen von iperf3 über Termux-API", e)
        }
    }



Java:
try {
    File iperfFile = copyIperfToInternalStorage(context);
    Process process = new ProcessBuilder(iperfFile.getAbsolutePath(), "-s").redirectErrorStream(true).start();

    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    String line;
    while ((line = reader.readLine()) != null) {
        Log.d("iperf", line);
    }

    process.waitFor();

} catch (IOException | InterruptedException e) {
    e.printStackTrace();
}
 

missy72

Bekanntes Mitglied
Was genau hast du denn in der Kommandozeile eingeben wollen?
Ist die Bin dadei auch eine ausführbare dadei für Android.
Eingabe: iperf3 -c 51.158.1.21 -p 5102 -i 1 -t 120 -b 20M
Wenn ich über eine ADB-Konsole den Befehl der Binärdatei in meiner App auf dem Handy ausführe, funktioniert es.
Aber ich hatte gelesen, dass ich über das ADB-Tool mehr rechte habe, als eine App die ausgeführt wird.
Das gehört wohl zu Sicherheitsstrategie von Android.
Binärdatei gibts hier. https://github.com/davidBar-On/android-iperf3/tree/gh-pages/libs/arm64-v8a
 
Zuletzt bearbeitet:

missy72

Bekanntes Mitglied
Hast Du mal geschaut, ob die Nutzung einer JNI Library wie https://github.com/mahmudur85/iperf-jni nicht besser ist, also so eine externe binary zu starten?
Tatsächlich habe ich das auch schon probiert. Aber ehrlich gesagt, bin ich da auch von einer Fehlermeldung in die nächste geraten. Aber auch weil ich überhaupt nicht verstanden habe was ich da alles machen muss. Da habe ich zu oft die KI um Hilfe gebeten ohne zu wissen, was ich da eigentlich anpasse und ändere.
Der Witz ist eigentlich wollte ich mir Arbeit ersparen und einen Test automatisieren und jetzt habe ich schon so viel Zeit reingesteckt, da hätte ich den Test 100 mal machen können.
Andererseits hat mich das Thema gefesselt und ist wirklich eine richtige Herausforderung für mich.
 

Jw456

Top Contributor
Eingabe: iperf3 -c 51.158.1.21 -p 5102 -i 1 -t 120 -b 20M
Wenn ich über eine ADB-Konsole den Befehl der Binärdatei in meiner App auf dem Handy ausführe, funktioniert es.
Aber ich hatte gelesen, dass ich über das ADB-Tool mehr rechte habe, als eine App die ausgeführt wird.
Das gehört wohl zu Sicherheitsstrategie von Android.
Binärdatei gibts hier. https://github.com/davidBar-On/android-iperf3/tree/gh-pages/libs/arm64-v8a
Du willst also aus deiner App heraus ein externeres Toll Kommando starten.
Das sollte auch in Android mit Runtime.getRuntime().exec("…"); gehen.

Ob jetzt Termux überhaupt einen Intent verarbeitet weiß ich jetzt nicht. Ist für mich auch nichtsinnvoll das so zumachen. Wenn dann rufe es selber auf , als Kommando und nicht über Termux.

Prinzipiell würde ich hier auch sagen besser ist eine Lib in deiner App zu benutzen als ein externes Toll.
Was dann auch erst mal instauriert werden muss. Denn Iperf3 ist nicht Standard mäßig im Android enthalten.
 
Zuletzt bearbeitet:

missy72

Bekanntes Mitglied
Ob jetzt Termux überhaupt einen Intent verarbeitet weiß ich jetzt nicht. Ist für mich auch nichtsinnvoll das so zumachen. Wenn dann rufe es selber auf. als Kommando.

Ja Termux sollte ja nur ein Notnagel sein, weil alles andere nicht geklappt hat. Aber das hat ja nun auch nicht funktioniert.

Das sollte auch in Android mit Runtime.getRuntime().exec("…"); gehen.
Und nein das geht so nicht, auch hier bekomme ich die gleich Fehlermeldung wie bei allem anderen.

Der Ping geht mit dem processBuilder
Java:
rivate fun executePingCommand(serverAddress: String, textView: TextView) {
        val processBuilder = ProcessBuilder("ping", "-c", "15", serverAddress)

        Thread {
            try {
                val process = processBuilder.start()
                val reader = BufferedReader(InputStreamReader(process.inputStream))
                var line: String?
                while (reader.readLine().also { line = it } != null) {
                    runOnUiThread {
                        textView.append(line + "\n")
                    }
                }
                process.waitFor()
            } catch (e: Exception) {
                Log.e("PING", "Fehler beim Ping", e)
                runOnUiThread {
                    textView.text = "Fehler: ${e.message}"
                }
            }
        }.start()
    }

Ich werde den Lösungsansatz von KonradN nochmal versuchen.
Die Library die ich verwendet hatte, ist noch mal etwas anders. https://github.com/esnet/iperf
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Lesen / Schreiben einer Textdatei - SD-Karte Android & Cross-Platform Mobile Apps 42
OnDemand Allgemeine Fragen zu einer App Android & Cross-Platform Mobile Apps 4
I Foto mit einer bestimmten Auflösung aufnehmen und als Datei ablegen. Android & Cross-Platform Mobile Apps 5
Jose05 Wie kann man mit einer App Geld verdienen? Android & Cross-Platform Mobile Apps 6
T Android Studio: Einen Button in einer For Schleife verwenden Android & Cross-Platform Mobile Apps 2
M Activity einer anderen App mit result Android & Cross-Platform Mobile Apps 2
J Android Zugriff auf eine Datei, diese von einer anderen App erstellt wurde? Android & Cross-Platform Mobile Apps 11
Mo1234 Plattform in einer App. Bitte um Hilfe! Android & Cross-Platform Mobile Apps 8
A Mit Java neues item in ein string-array einer Strings.xml schreiben Android & Cross-Platform Mobile Apps 4
P Android Wie bestimme ich den Dateinamen einer Bilddatei? Android & Cross-Platform Mobile Apps 11
B Falsche ausgabe einer Rechnung! Android & Cross-Platform Mobile Apps 8
M Android Dynamische SchriftGröße einer TextView Android & Cross-Platform Mobile Apps 3
J Android Suche in einer ListView Android & Cross-Platform Mobile Apps 3
G Android Daten in einer Datenbank speichern Android & Cross-Platform Mobile Apps 1
J Android button mithilfe einer Methode automatisch erstellen Android & Cross-Platform Mobile Apps 6
JavaWolf165 Android Fehler beim Speichern/Downloaden einer Datei Android & Cross-Platform Mobile Apps 2
S Android Probleme beim Verbinden mit einer HTTPS Seite Android & Cross-Platform Mobile Apps 4
B Android wie kann ich in einer xml nach bestimme item suchen (DOM) Android & Cross-Platform Mobile Apps 7
C Android Diese Art von Werbung in einer App? Android & Cross-Platform Mobile Apps 1
G ständig ändernden Inhalten in einer App Android & Cross-Platform Mobile Apps 2
R Android Eine Website-frame in einer App Android & Cross-Platform Mobile Apps 4
H Android Aufrufen von "setContentView" in einer anderen Klasse Android & Cross-Platform Mobile Apps 3
S Die Erstellung einer eigenen App,Kosten? Android & Cross-Platform Mobile Apps 1
M Android Speichern einer .txt Datei im InternalStorage Android & Cross-Platform Mobile Apps 2
B Fragen zum Speichern einer Datei auf dem Gerät? Android & Cross-Platform Mobile Apps 7
C Auf Play Store verlinken - Code in einer Extraklasse Android & Cross-Platform Mobile Apps 1
G Thread in einer Service erstellen Android & Cross-Platform Mobile Apps 0
B Android Spieler Steuerung auf einer Map mit Berge? Android & Cross-Platform Mobile Apps 7
M Android Quellcode einer Website Android & Cross-Platform Mobile Apps 7
K Löschen einer Tabelle bei PlayStore update Android & Cross-Platform Mobile Apps 2
H Veröffentlichung einer Bezahl-App Android & Cross-Platform Mobile Apps 5
Robat Android ConcurrentModificationException während einer for Schleife Android & Cross-Platform Mobile Apps 15
D Android EditText und TextView haben unterschiedliche größen innerhalb einer TableRow Android & Cross-Platform Mobile Apps 18
M Umlaute im Quellcode einer Website richtig darstellen Android & Cross-Platform Mobile Apps 4
M Quellcode einer Website auslesen Android & Cross-Platform Mobile Apps 5
T Android platzsparende Codierung verschlüsselter Texte in einer URI Android & Cross-Platform Mobile Apps 8
S Android "Weiches wechseln" zwischen Views in einer Activity Android & Cross-Platform Mobile Apps 3
F Bei einer Android Java App, Objekte erstellen Android & Cross-Platform Mobile Apps 2
G eine Methode einer anderen Activity aufrufen Android & Cross-Platform Mobile Apps 9
G Einbinden einer Bibliothek's App Android & Cross-Platform Mobile Apps 2
G Daten von einer Activity zur nächsten übergeben Android & Cross-Platform Mobile Apps 6
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
A Kann nicht in TextView einer anderen Klasse schreiben - wieso? Android & Cross-Platform Mobile Apps 9
A Beenden einer 2ten Activity Android & Cross-Platform Mobile Apps 3
T Android Multiple SDK-Support in einer Apk Android & Cross-Platform Mobile Apps 5
R Android Unterschiedliche Versionen von Android in einer App Android & Cross-Platform Mobile Apps 7
D Mehrere Kopien von einer Form Android & Cross-Platform Mobile Apps 7
M Wie in einer anderen "nicht canvas" klasse zeichne Android & Cross-Platform Mobile Apps 5
S Problem mit Einbindung einer externer Bibliothek Android & Cross-Platform Mobile Apps 2
S Variable Anzahl von Bytes aus einer Datei lesen Android & Cross-Platform Mobile Apps 2
P Erstellen einer Jar-File Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben