curl کے بغیر HTTP درخواستیں: Bash /dev/tcp کی وضاحت

آپ ایک انتہائی سادہ (stripped-down) Docker کنٹینر کے اندر ہیں۔ آپ کو ایک API اینڈ پوائنٹ چیک کرنے کی ضرورت ہے۔ آپ curl ٹائپ کرتے ہیں اور "command not found" کا ایرر ملتا ہے۔ آپ wget آزماتے ہیں اور وہی ایرر ملتا ہے۔

آپ کو گھبرانے کی ضرورت نہیں ہے۔ Bash کے اپنے بنیادی ڈھانچے میں ایک چھپا ہوا فیچر موجود ہے۔ اسے /dev/tcp کہا جاتا ہے۔

یہ فیچر آپ کو کسی بھی ٹول کو انسٹال کیے بغیر براہ راست (raw) TCP کنکشنز کھولنے کی اجازت دیتا ہے۔ یہ تقریباً ہر Linux سسٹم پر کام کرتا ہے۔

یہ کیسے کام کرتا ہے: جب آپ /dev/tcp/hostname/port کا حوالہ دیتے ہیں، تو Bash ایک ساکٹ کنکشن (socket connection) کھول دیتا ہے۔ یہ ایک Bash-specific فیچر ہے۔ یہ sh یا zsh میں کام نہیں کرے گا۔

جادوئی کمانڈ: exec 3<>/dev/tcp/hostname/port

یہ لائن ایک دو طرفہ (bidirectional) فائل ڈسکرپٹر کھولتی ہے۔ آپ اس میں ڈیٹا لکھ سکتے ہیں اور جوابات (responses) پڑھ سکتے ہیں۔

GET درخواست کی مثال:

#!/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>&-

یہ کیوں مفید ہے: • ایسے کم سے کم (minimal) ماحول میں ڈیبگنگ کرنا جہاں آپ پیکجز انسٹال نہیں کر سکتے۔ • بغیر کسی انحصار (zero dependencies) کے CI/CD پائپ لائنز میں ہیلتھ چیک چلانا۔ • ایمبیڈڈ سسٹمز پر کنیکٹیویٹی کا ٹیسٹ کرنا۔ • یہ سیکھنا کہ HTTP ہیڈرز بالکل کیسے کام کرتے ہیں۔

یاد رکھنے کے لیے اہم حدود: • HTTPS نہیں: Bash TLS/SSL انکرپشن کو ہینڈل نہیں کر سکتا۔ انکرپٹڈ ٹریفک کے لیے openssl s_client استعمال کریں۔ • ری ڈائریکٹس (Redirects) نہیں: آپ کو انہیں خود مینوئل طریقے سے ہینڈل کرنا ہوگا۔ • پیچیدگی نہیں: اسے پروڈکشن HTTP کلائنٹس کے لیے استعمال نہ کریں۔ اس کے لیے curl استعمال کریں۔

ہمیشہ Connection: close ہیڈر شامل کریں۔ اگر آپ اسے بھول گئے، تو آپ کا اسکرپٹ سرور کا انتظار کرتے ہوئے ہینگ (hang) ہو سکتا ہے۔

اگلی بار جب آپ کسی محدود (locked-down) سرور میں پھنس جائیں، تو اس ٹرک کا استعمال کریں۔ یہ ایک بند راستے کو ایک کام کرنے والے ٹول میں بدل دیتا ہے۔

Source: https://dev.to/onsen/http-requests-without-curl-bash-devtcp-explained-5852

Optional learning community: https://t.me/GyaanSetuAi