Wiem, że /dev/tcp/<host>/<port>
to magiczna ścieżka obsługiwana przez niektóre pociski w przekierowaniach. Ale zgodnie z man bash
:
Jeśli system operacyjny, na którym działa bash, zapewnia te specjalne pliki, bash ich użyje; w przeciwnym razie będzie naśladować je wewnętrznie [...]
Na komputerze z Linuksem, którego teraz używam, /dev/tcp
specjalny plik nie jest obecny, więc Bash go naśladuje . Ale czy faktycznie istnieje system podobny do Uniksa, który zapewnia /dev/tcp
specjalnemu plikowi ten sam semantyczny, co ten obsługiwany przez Bash?
devices
tcp
character-special-files
Sylvain Leroux
źródło
źródło
/dev
jest tmpfs na aktualnych linuksach, i był na partycji root w starszych. Dlatego obecnie jest to niemożliwe. Można to łatwo uczynić za pomocą rozszerzenia sysfs lub procfs (oba fs są bardzo elastyczne i podobne (w rzeczywistości prawdopodobnie nikt nie wie, dlaczego nie są takie same)), nikt tego dzisiaj nie robi, ale można to zrobić w około 100 wiersze kodu.Odpowiedzi:
Myślę, że dokumentacja Bash jest nieco myląca w tym temacie. Patrząc na kod, nawet wracając do wersji 2.04, gdzie zostały wprowadzone przekierowania sieci,
/dev/tcp
i/dev/udp
działa w następujący sposób:configure
skrypt sprawdza, czy obsługiwane są różne funkcje sieciowe; jeśli tak, jeśli przekierowania sieciowe są włączone (tak jest domyślnie), wbudowany jest wewnętrzny kod sieci;/dev/tcp
i/dev/udp
(we właściwym formacie) jest obsługiwany wewnętrznie; w przeciwnym razie generowane jest ostrzeżenie („/ dev / (tcp | udp) / host / port nie jest obsługiwane bez pracy w sieci”) i Bash próbuje otworzyć daną ścieżkę w systemie;Sprowadza się to do:
/dev/tcp
i/dev/udp
zawsze będzie obsługiwana wewnętrznie;/dev/(tcp|udp)/host/port
, to zostanie użyte, w przeciwnym razie przekierowanie nie powiedzie się;/dev/(tcp|udp)/host/port
, zostanie użyty, w przeciwnym razie przekierowanie nie powiedzie się./dev/tcp
istnieje w niektórych systemach, ale o ile wiem, żaden nie obsługuje takiej samej abstrakcji jak Bash. W/dev/tcp
systemie Solaris jest używany zndd
narzędziem do wysyłania zapytań i zmiany konfiguracji sieci. W XTI (patrz także otwarta grupa, jeśli jesteś członkiem),t_open
funkcji można użyć/dev/tcp
do otwarcia połączenia TCP, ale nie używa ona konfiguracji opartej na ścieżce, istnieje osobna struktura danych, aby określić hosta docelowego i port (i inne parametry).źródło