Ist es unter Linux möglich, dass ein Prozess in einen Socket schreibt, der von einem anderen geöffnet wurde?
Angenommen, ich öffne mit netcat eine Verbindung zu google.com:
myuser@linux:~$ nc google.com 80
Jetzt kann ich nach der Prozess-PID suchen und ihren Dateideskriptor-Ordner öffnen:
myuser@linux:~$ ls -la /proc/24105/fd
totale 0
dr-x------ 2 myuser myuser 0 2012-03-10 19:01 .
dr-xr-xr-x 7 myuser myuser 0 2012-03-10 19:01 ..
lrwx------ 1 myuser myuser 64 2012-03-10 19:02 0 -> /dev/pts/12
lrwx------ 1 myuser myuser 64 2012-03-10 19:02 1 -> /dev/pts/12
lrwx------ 1 myuser myuser 64 2012-03-10 19:01 2 -> /dev/pts/12
lrwx------ 1 myuser myuser 64 2012-03-10 19:02 3 -> socket:[3947162]
Jetzt möchte ich die HTTP-Anfrage mit einem Echo in diesem Socket stellen:
myuser@linux:~$ echo "GET / HTTP/1.1" >> /proc/24285/fd/3
bash: /proc/24285/fd/3: no such device or address
Wenn Sie es als root tun, ändert sich das Ergebnis nicht.
Ich kann nicht in den Socket schreiben, aber ich kann in den Standard schreiben:
myuser@linux:~$ echo "GET / HTTP/1.1" >> /proc/24285/fd/0
myuser@linux:~$
Aber es ist nicht das, was ich tun möchte.
Ich dachte: Ein Linux-Socket sollte wie eine Datei behandelt werden, nicht wahr? Ein oder mehrere Prozesse können denselben Socket verwenden. Warum kann ich das nicht tun?
gdb -p 24285
und dann kann ich mit in den Dateideskriptor schreiben call write(3, "test",4)
. Es funktioniert, aber ich möchte das Gleiche aus dem Prozess heraus tun, da die Verwendung von gdb das Stoppen des Prozesses erfordert (
nc
kann dies tun, aber wenn Sie dies versuchen, wird "Transportendpunkt ist nicht verbunden" angezeigt. Beispiel Befehlnc -v --send-only -U /proc/123/fd/3 <<< 'GET /'$'\n\n'