𝗛𝗧𝗧𝗣 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗪𝗶𝘁𝗵𝗼𝘂𝘁 𝗰𝘂𝗿𝗹: 𝗕𝗮𝘀𝗵 /𝗱𝗲𝘃/𝗧𝗖𝗣 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱

మీరు ఒక పరిమితమైన (stripped-down) Docker కంటైనర్‌లో ఉన్నారు. మీరు ఒక API endpoint ని తనిఖీ చేయాలి. మీరు curl అని టైప్ చేస్తే "command not found" అని వస్తుంది. మీరు wget ప్రయత్నిస్తే కూడా అదే ఎర్రర్ వస్తుంది.

మీరు కంగారు పడాల్సిన అవసరం లేదు. Bash లో దాని కోర్ (core) లోనే ఒక దాగి ఉన్న ఫీచర్ ఉంది. దీనిని /dev/tcp అని పిలుస్తారు.

ఎటువంటి టూల్స్ ఇన్‌స్టాల్ చేయకుండానే ఈ ఫీచర్ ద్వారా మీరు రా (raw) TCP కనెక్షన్‌లను ఓపెన్ చేయవచ్చు. ఇది దాదాపు అన్ని Linux సిస్టమ్స్‌లో పనిచేస్తుంది.

ఇది ఎలా పనిచేస్తుంది: మీరు /dev/tcp/hostname/port ని ఉపయోగించినప్పుడు, Bash ఒక సాకెట్ కనెక్షన్‌ను ఓపెన్ చేస్తుంది. ఇది Bash కి మాత్రమే ప్రత్యేకమైన ఫీచర్. ఇది 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) ఎన్విరాన్‌మెంట్లలో డీబగ్గింగ్ చేయడానికి. • ఎటువంటి డిపెండెన్సీలు లేకుండా CI/CD పైప్‌లైన్‌లలో హెల్త్ చెక్‌లను రన్ చేయడానికి. • ఎంబెడెడ్ సిస్టమ్స్‌లో కనెక్టివిటీని పరీక్షించడానికి. • HTTP హెడర్‌లు ఖచ్చితంగా ఎలా పనిచేస్తాయో నేర్చుకోవడానికి.

గుర్తుంచుకోవలసిన ముఖ్యమైన పరిమితులు: • No HTTPS: Bash, TLS/SSL ఎన్‌క్రిప్షన్‌ను హ్యాండిల్ చేయలేదు. ఎన్‌క్రిప్టెడ్ ట్రాఫిక్ కోసం openssl s_client ఉపయోగించండి. • No Redirects: మీరు వాటిని మాన్యువల్‌గా హ్యాండిల్ చేయాలి. • No Complexity: దీనిని ప్రొడక్షన్ HTTP క్లయింట్‌ల కోసం ఉపయోగించవద్దు. వాటి కోసం curl ఉపయోగించండి.

ఎల్లప్పుడూ Connection: close హెడర్‌ను చేర్చండి. ఒకవేళ మీరు దానిని మర్చిపోతే, సర్వర్ కోసం వేచి చూస్తూ మీ స్క్రిప్ట్ హ్యాంగ్ (hang) అయ్యే అవకాశం ఉంది.

తదుపరిసారి మీరు లాక్ చేయబడిన (locked-down) సర్వర్‌లో చిక్కుకున్నప్పుడు, ఈ ట్రిక్‌ని ఉపయోగించండి. ఇది ఒక నిలిచిపోయిన పరిస్థితిని (dead end) పని చేసే సాధనంగా మారుస్తుంది.

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

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