Warum ist mein TCP-Verbindungsversuch über PHP komisch?
Ich bin nicht sicher, ob dies hier oder auf SO besser ist, aber da das Problem nicht in der Programmierung liegt, habe ich mir gedacht, dass es hier zutrifft (oder auf U & L oder auf Serverfault, aber ich denke / hoffe, dass es mir gut geht.)
Ich möchte TCP-Befehle von PHP an eine Instanz von Telegramm-cli senden .
Bis jetzt habe ich verwendet: shell_exec('echo "msg user#idXXXXXX message" | nc 127.0.0.1 9007');
und es hat gut funktioniert. Aber es gibt Variablen und Benutzereingaben, und obwohl ich meine Variablen zitiere, finde ich das schlechtes OPSEC. Ich möchte stattdessen PHP- Sockets verwenden, aber hier beginnen die Probleme.
Der TCP-Server wird unter dem Benutzer "B" auf dem Server gestartet. PHP läuft als "www-data". Das Ausführen des oben genannten shell_exec
funktioniert als Benutzer gut www-data
. Als Benutzer angemeldet zu sein A
und den Befehl direkt in einer Bash-Shell auszuführen, funktioniert auch. Mit dem nackten netcat kann ich mich auch als Benutzer mit dem Socket verbinden, A
deshalb denke ich, dass ein Berechtigungsproblem hier nicht der Fall ist. Benutzer A
ist ein normaler Benutzer ohne besondere Berechtigungen.
Mein PHP-Code:
$fp = fsockopen("127.0.0.1", 9007, $errno, $errstr, 5); fwrite($fp, 'msg user#idXXXX "message"');
Was das macht, ist absolut nichts.
Und hier kommt der Grund, warum ich dies für StackOverflow nicht für angebracht halte:
Wenn ich nach dem Ausführen als Benutzer versuche, eine Verbindung zum Port 9001
(zum Testen) anstelle von 9007
(auf dem tg-cli ausgeführt wird) zu verbinden, funktioniert es einwandfrei und ich kann die Nachricht sehen, die PHP in der Ausgabe sendet .nc -l 9001
A
nc
Wenn man das beurteilt, muss das Problem irgendwo außerhalb meines kurzen PHP-Codes liegen, aber ich habe keine Ahnung, wo ich suchen muss. Die Verbindung ist hergestellt, fwrite
sendet jedoch nichts.
$fp = fsockopen("127.0.0.1", 9007, $errno, $errstr, 5); if(!$fp){ echo "$errstr ($errno)"; die(); }else{ echo "test"; // THIS IS BEING PRINTED fwrite($fp, 'msg user#idXXXXX "message"'); while(!feof($fp)){ echo fgets($fp); } fclose($fp); }
Dies ist der gesamte fragliche Codeblock. Das test
wird gedruckt, das fwrite
wird ausgeführt (da PHP in die while-Schleife eintritt), tg-cli
erhält aber nichts. Das PHP-Skript steckt dann komplett in der while-Schleife (keine Ausgabe!), Bis ich SIGTERM
apache2.
Edit: Die Ausgabe von tg-cli im Debug-Modus, wenn ich versuche, die Nachricht zu senden:
*** 1538301112.516826 Accepting incoming connection *** 1538301112.517262 Read from incoming connection
Edit2: Für weitere Berechtigungsprüfungen bin ich gelaufen sudo -u www-data echo 'dialog_list' | nc 127.0.0.1 9007
- mit Erfolg.
Edit3: Ich habe auch überprüft, base64
dass PHP fwrite
genau das sendet, was er senden soll.
Edit4: Ich kann ausschließen, dass das Problem in der Antwort des Servers an PHP zurückliegt, da tg-cli meldet, dass es von der TCP-Verbindung liest, es aber nicht verarbeitet. Wenn ich beispielsweise shell_exec
oder nc
auf der Shell verwende, meldet es, dass nach dem Lesen aus dem TCP-Stream eine Abfrage an das Datencenter von Telegram gesendet wurde. Dies ist nicht der Fall, wenn Sie meinen obigen PHP-Code verwenden.
Edit5: Ich habe auch versucht, mit dem TCP - Befehl Suffix \n
, \r
oder \n\r
aber wieder ohne Erfolg. Könnte es sein, dass ich den Befehl mit etwas Bestimmtem beenden muss? Nichts davon ist erforderlich, wenn Sie nichts nc
oder nichts verwenden shell_exec()
.
0 Antworten auf die Frage
Verwandte Probleme
-
9
Was ist der Unterschied zwischen den Befehlen "su -s" und "sudo -s"?
-
4
Gutes freies Ubuntu Server-VMWare-Image benötigt
-
4
Was sind die Unterschiede zwischen den großen Linux-Distributionen? Werde ich es merken
-
2
Begrenzung der CPU-Auslastung für Flash in Firefox?
-
2
Wie kann ich mein Mikrofon unter Debian GNOME zum Laufen bringen?
-
2
Conky-Setups - Beispiele / Ideen?
-
3
Was sind die Unterschiede zwischen Linux Window Managern?
-
2
ThunderBird / Lichtsynchronisation mit SE k770i
-
4
Linux-Dateisystem
-
6
Vollbild-Flash langsam in KDE 4