Geri qayıt
curl olmadan HTTP sorğusu: konteynerdə bash /dev/tcp üsulu
SiTech AI Team2 წთ. საკითხავი

curl olmadan HTTP sorğusu: konteynerdə bash /dev/tcp üsulu

Daxili Docker şəbəkəsində bir konteynerin digərinə çatıb-çatmadığını yoxlamalı olan tərtibatçı imicdə nə curl, nə də wget tapdı və HTTP sorğusunu bash-in /dev/tcp yönləndirməsi ilə əl ilə yazdı.

Daxili Docker şəbəkəsində bir konteynerin digərinə çatıb-çatmadığını yoxlaması lazım olan tərtibatçı adi aləti tapa bilmədi: tətbiqin imici son dərəcə kəsilib və içində nə curl, nə wget, nə də soket açmaq üçün başqa vasitə qalmışdı. Qısa qeyddə təsvir olunan həll bash-in daxili imkanına — /dev/tcp saxta qurğusuna — söykənir: qabıq TCP soketini özü açır, HTTP sorğusu isə əl ilə yazılır.

Yalnız qabıq vasitələri ilə yazılan HTTP sorğusu

Yanaşma artıq mövcud olan qabıqdan başqa heç nə tələb etmir. Hədəf host və port üçün fayl deskriptoru açılır — exec 3<>/dev/tcp/service/8642 — sonra printf ilə minimal sorğu yazılır: sorğu sətri, Host başlığı və Connection: close. cat <&3 əmri serverin qaytardığı hər şeyi çap edir: status sətrini, başlıqları və gövdəni. Authorization: Bearer başlığını əlavə etmək sorğunu bağlayan boş sətirdən əvvəl CRLF ilə bitən daha bir sətir yazmaqdan ibarətdir.

/dev/tcp diskdə mövcud deyil

Ən çox təəccübləndirən məqam budur ki, /dev/tcp real fayl deyil: ls /dev/tcp heç nə tapmır, başqa qabıqdan cat isə sadəcə xəta qaytarır. Bu, bash-in daxildə emal etdiyi yönləndirmədir; DNS axtarışını və connect(2) çağırışını bash özü edir, sonra soketə fayl deskriptoru verir. Adlar xüsusi seçilib, çünki heç bir real Unix-də /dev/tcp iyerarxiyası yoxdur və toqquşma mümkün deyil. Bu, POSIX deyil, bash xüsusiyyəti olduğundan dash və zsh-də işləmir; skript bash-i birbaşa çağırmalıdır.

Bu üsul nəyi edə bilmir

Müəllif açıq şəkildə vurğulayır: bu HTTP klienti deyil. Cavabları təhlil etmir, yönləndirmələri izləmir, chunked kodlaşdırma, sıxılma, təkrar cəhdlər və TLS ilə məşğul olmur — soket yalnız açıq mətn üçündür, https üçün openssl s_client lazım gələcək. Connection: close başlığı buraxılarsa, server bağlantını açıq saxlayır və cat heç vaxt gəlməyəcək baytları sonsuz gözləyir; əmri timeout 6 bash -c '...' içinə almaq bundan qoruyur. Xüsusiyyət kompilyasiya zamanı açılan seçimdir (--enable-net-redirections): müasir qurğuların çoxunda aktivdir, amma Debian onu illərlə söndürülmüş şəkildə yayırdı. Nəticə dəyişmir: gündəlik işdə düzgün alət yenə curl-dur, lakin qəsdən minimuma salınmış konteynerdə bu hiylə paket quraşdırmadan sürətli yoxlama imkanı verir.

SSiTech

SiTech — AI ilə gücləndirilmiş veb hazırlanması

Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.