/ Dev / tcp kullanmak için neden <veya> gereklidir?


13

Aramaya çalışırken /dev/tcp/www.google.com/80, yazarak

/dev/tcp/www.google.com/80

Bash diyor no such file or directory. Diğer kişilerin kodlarına çevrimiçi bakarken, söz dizimi gibi

 3<>/dev/tcp/www.google.com/80

Bunun da işe yaradığını fark ettim:

</dev/tcp/www.google.com/80

Neden bu sembollere bash'de bazı şeyleri çağırmak gerekiyor?


2
“Ara” ile ne demek istiyorsun? Hatayı aldığınızda lütfen bize ne yaptığınızı gösterin. Yürütmeye mi çalışıyorsun? Google'ın ön sayfası yürütülebilir kod olsa bile, ben bunu tavsiye etmem.
ctrl-alt-delor

/dev/tcp/www.google.com/80
john doe

Ne demek istediğimi söylemek için sorunuzu düzenledim.
ctrl-alt-delor

Yanıtlar:


29

Çünkü bu, kabuğun (bassh tarafından kopyalanan ksh) ve yalnızca kabuğun bir özelliğidir.

/dev/tcp/...gerçek dosyalar olmadığında, kabuk bir /dev/tcp/...dosyaya yeniden yönlendirme denemelerini durdurur ve bu durumda (bu dosyayı açarak socket(...);connect(...)) yerine a open("/dev/tcp/..."...)( TCP bağlantısı yapar) yapar .

Bu şekilde hecelenmesi gerektiğini unutmayın. cat < /dev/./tcp/...veya ///dev/tcp/...çalışmaz ve bunun yerine bu dosyaları açmaya çalışır (çoğu sistemde mevcut değildir ve bir hata alırsınız).

Yönlendirmenin yönü de önemli değil. Kullanmak İster 3< /dev/tcp/...ya 3> /dev/tcp/...ya 3<> /dev/tcp/...ya da 3>> /dev/tcp/...herhangi bir fark yapmaz, o TCP soketi üzerinden / gönderme veri almaya bu dosya tanımlayıcı için / den hem okuma ve yazma mümkün olacak.

Bunu yaptığınızda cat /dev/tcp/..., cataynı özel işleme uygulamadığı için işe yaramaz open("/dev/tcp/..."), her dosya için (hariç -), yalnızca kabuk (yalnızca ksh, bash) yapar ve yalnızca yeniden yönlendirme hedefi için bir şey yapar.

Bu cat -, özel olarak işlenen bir dosya yolunun başka bir örneğidir. A yapmak yerine, open("-")doğrudan 0 dosya tanımlayıcısından (stdin) okur. catve birçok metin yardımcı programı bunu yapar, kabuk yeniden yönlendirmeleri için değildir. -Dosyanın içeriğini okumak için cat ./-, veya cat < -(veya cat - < -) gerekir. Ancak /dev/stdin, olmayan sistemlerde, bashbu (sanal) dosyadan yeniden yönlendirmeler için benzer bir şey yapar. GNU awkiçin aynısını yapar /dev/stdin, /dev/stdout, /dev/stderrhatta bu dosyalar farklı davranır nerede Linux gibi sistemlerde bazı sürprizler neden olabilir bu tür dosyaları var sistemlerde.

zshTCP (ve Unix etki alanı akışı) yuva desteğine de sahiptir, ancak bu bir ztcp(ve zsocket) yerleşiklerle yapılır, bu nedenle ksh / bash yaklaşımından daha az sınırlıdır. Özellikle, ksh / bash'ın yapamayacağı bir sunucu olarak da işlev görebilir. Yine de gerçek bir programlama dilinde yapabileceklerinizden çok daha sınırlıdır.


4

Fikirleri karıştırıyor ya da bir dosya okuyor ve bir komut yürütüyorsunuz. Veri ve talimat arasındaki fark.

Google'ın ön sayfası yürütülebilir bir program değil. Ve eğer olsaydı, onu çalıştırmak güvenli olmazdı.

Yönlendirme karakterleri ( <ve dahil >), verileri bir komuta yönlendirmek için kullanılır.

Yapabiliriz cat < /dev/tcp/towel.blinkenlights.nl/23Ancak bu /dev/tcp/www.google.com/80bağlantı noktası gönderilmedikçe bu bağlantı noktası yanıt vermeyeceğindenGET / HTTP/1.0\r\n\r\n

O zaman dene

{
  printf >&3 'GET / HTTP/1.0\r\n\r\n'
  cat <&3
} 3<>/dev/tcp/www.google.com/80

1
Dosya mevcut, ancak yürütülebilir değilse farklı bir hata alırsınız.
Barmar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.