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 24285und 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 (
nckann 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'