Ich weiß, dass /dev/tcp/<host>/<port>
es sich um einen magischen Pfad handelt, der speziell von einigen Muscheln in Umleitungen behandelt wird. Aber laut man bash
:
Wenn das Betriebssystem, auf dem bash ausgeführt wird, diese speziellen Dateien bereitstellt, verwendet bash sie. Andernfalls werden sie intern emuliert [...]
Auf der Linux-Box, die ich gerade verwende, ist die /dev/tcp
spezielle Datei nicht vorhanden, daher wird sie vom Bash emuliert . Aber gibt es tatsächlich ein Unix-ähnliches System, das der /dev/tcp
speziellen Datei dieselbe Semantik verleiht wie der von Bash unterstützten?
devices
tcp
character-special-files
Sylvain Leroux
quelle
quelle
/dev
ist ein tmpfs unter aktuellen Linux, und es war auf der Root-Partition in älteren. Deshalb ist es derzeit unmöglich. Es könnte leicht mit einer sysfs- oder procfs-Erweiterung ermöglicht werden (beide fs sind sehr flexibel und ähnlich (eigentlich weiß wahrscheinlich niemand, warum sie nicht gleich sind)), niemand tut es heute, aber es könnte in ungefähr 100 gemacht werden Zeilen von Code.Antworten:
Ich denke, die Bash-Dokumentation ist zu diesem Thema etwas irreführend. Wenn Sie sich den Code ansehen, gehen Sie sogar zurück zu Version 2.04, in der Netzwerkumleitungen eingeführt wurden,
/dev/tcp
und/dev/udp
funktionieren Sie wie folgt:configure
überprüft das Skript, ob verschiedene Netzwerkfunktionen unterstützt werden. Wenn dies der Fall ist und Netzwerkumleitungen aktiviert sind (was standardmäßig der Fall ist), ist interner Netzwerkcode integriert./dev/tcp
und/dev/udp
(im richtigen Format) intern verarbeitet wird; Andernfalls wird eine Warnung ausgegeben ("/ dev / (tcp | udp) / host / port wird ohne Netzwerk nicht unterstützt") und Bash versucht, den angegebenen Pfad auf dem System zu öffnen.Worauf es ankommt, ist:
/dev/tcp
und/dev/udp
immer intern gehandhabt wird;/dev/(tcp|udp)/host/port
, wird dies verwendet, andernfalls schlägt die Umleitung aller Wahrscheinlichkeit nach fehl./dev/(tcp|udp)/host/port
, wird dies verwendet, andernfalls schlägt die Umleitung aller Wahrscheinlichkeit nach fehl./dev/tcp
existiert auf einigen Systemen, aber meines Wissens unterstützt keine die gleiche Abstraktion wie Bash. Wird unter Solaris/dev/tcp
mit demndd
Tool zum Abfragen und Ändern der Netzwerkkonfiguration verwendet. In XTI (siehe auch Open Group, wenn Sie Mitglied sind) kann diet_open
Funktion/dev/tcp
zum Öffnen einer TCP-Verbindung verwendet werden, verwendet jedoch kein pfadbasiertes Setup. Es gibt eine separate Datenstruktur zum Angeben des Zielhosts und Port (und andere Parameter).quelle