curl Olmadan HTTP İstekleri: Bash /dev/tcp Açıklaması

Sadeleştirilmiş bir Docker konteynerinin içindesiniz. Bir API uç noktasını (endpoint) kontrol etmeniz gerekiyor. curl yazıyorsunuz ve "command not found" hatası alıyorsunuz. wget deniyorsunuz ve aynı hatayı alıyorsunuz.

Panik yapmanıza gerek yok. Bash'in çekirdeğine yerleşik gizli bir özelliği var. Buna /dev/tcp denir.

Bu özellik, herhangi bir araç yüklemeden ham TCP bağlantıları açmanıza olanak tanır. Neredeyse tüm Linux sistemlerinde çalışır.

Nasıl çalışır: /dev/tcp/hostname/port ifadesine atıfta bulunduğunuzda, Bash bir soket bağlantısı açar. Bu, Bash'e özgü bir özelliktir. sh veya zsh içinde çalışmayacaktır.

Sihirli komut: exec 3<>/dev/tcp/hostname/port

Bu satır, çift yönlü bir dosya tanımlayıcısı (file descriptor) açar. Ona veri yazabilir ve yanıtları geri okuyabilirsiniz.

Örnek GET isteği: #!/bin/bash exec 3<>/dev/tcp/example.com/80 printf "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n" >&3 cat <&3 exec 3>&-

Bu neden kullanışlıdır: • Paket yükleyemediğiniz minimal ortamlarda hata ayıklama (debugging) yapmak için. • Sıfır bağımlılıkla CI/CD süreçlerinde sağlık kontrolleri (health checks) çalıştırmak için. • Gömülü sistemlerde bağlantıyı test etmek için. • HTTP başlıklarının tam olarak nasıl çalıştığını öğrenmek için.

Unutulmaması gereken önemli kısıtlamalar: • HTTPS Yok: Bash, TLS/SSL şifrelemesini işleyemez. Şifrelenmiş trafik için openssl s_client kullanın.