𝗠𝗮𝗸𝗲 𝗛𝗧𝗧𝗣 𝗥𝗲𝗾𝘂𝗲𝘀𝘁𝘀 𝗪𝗶𝘁𝗵𝗼𝘂𝘁 𝗖𝘂𝗿𝗹
ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਅਜਿਹੇ ਸਰਵਰ 'ਤੇ ਕੰਮ ਕਰ ਰਹੇ ਹੋਵੋ ਜਿੱਥੇ curl ਜਾਂ wget ਨਹੀਂ ਹੈ। ਤੁਹਾਨੂੰ ਇੱਕ endpoint ਨੂੰ ਟੈਸਟ ਕਰਨ ਦੀ ਲੋੜ ਹੈ ਪਰ ਉਹ ਟੂਲ ਉੱਥੇ ਮੌਜੂਦ ਨਹੀਂ ਹਨ। ਤੁਸੀਂ HTTP requests ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਭੇਜਣ ਲਈ Bash ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ।
Bash ਵਿੱਚ /dev/tcp ਨਾਮ ਦੀ ਇੱਕ ਲੁਕੀ ਹੋਈ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ। ਇਹ ਕੋਈ ਅਸਲੀ ਫਾਈਲ ਨਹੀਂ ਹੈ। ਇਹ ਇੱਕ ਵਿਸ਼ੇਸ਼ ਡਿਵਾਈਸ ਹੈ ਜਿਸ ਨੂੰ Bash ਸਮਝਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ /dev/tcp/hostname/port 'ਤੇ ਲਿਖਦੇ ਹੋ, ਤਾਂ Bash ਤੁਹਾਡੇ ਲਈ ਇੱਕ TCP connection ਖੋਲ੍ਹ ਦਿੰਦਾ ਹੈ।
ਇਹ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ:
ਤੁਸੀਂ file descriptors ਨੂੰ ਪ੍ਰਬੰਧਿਤ ਕਰਨ ਲਈ exec command ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ। ਉਦਾਹਰਨ ਲਈ, ਤੁਸੀਂ ਪੜ੍ਹਨ ਅਤੇ ਲਿਖਣ ਲਈ file descriptor 3 ਖੋਲ੍ਹ ਸਕਦੇ ਹੋ।
Syntax ਇਸ ਤਰ੍ਹਾਂ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ:
exec 3<>/dev/tcp/example.com/80
ਇੱਕ ਵਾਰ ਇਹ connection ਖੁੱਲ੍ਹ ਜਾਣ ਤੋਂ ਬਾਅਦ, ਤੁਸੀਂ ਇਸਨੂੰ ਡਾਟਾ ਭੇਜਦੇ ਹੋ। ਤੁਸੀਂ ਇਸ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਦੇ ਵੀ ਹੋ। ਇਹ ਵਿਧੀ ਤੁਹਾਨੂੰ ਦਿਖਾਉਂਦੀ ਹੈ ਕਿ HTTP protocol ਘੱਟ ਪੱਧਰ (low level) 'ਤੇ ਕਿਵੇਂ ਕੰਮ ਕਰਦਾ ਹੈ।
GET request ਕਿਵੇਂ ਬਣਾਈਏ:
ਡਾਟਾ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਤੁਹਾਨੂੰ ਸਹੀ headers ਭੇਜਣੇ ਚਾਹੀਦੇ ਹਨ। ਆਪਣੀ request ਦੇ ਅੰਤ ਦਾ ਸੰਕੇਤ ਦੇਣ ਲਈ ਤੁਹਾਨੂੰ ਅੰਤ ਵਿੱਚ ਇੱਕ ਖਾਲੀ ਲਾਈਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।
ਇਹਨਾਂ ਕਦਮਾਂ ਦੀ ਪਾਲਣਾ ਕਰੋ:
- ਆਪਣੇ host, port, ਅਤੇ path variables ਸੈੱਟ ਕਰੋ।
execਦੀ ਵਰਤੋਂ ਕਰਕੇ connection ਖੋਲ੍ਹੋ।- GET request ਭੇਜਣ ਲਈ
printfਦੀ ਵਰਤੋਂ ਕਰੋ। ਲਾਈਨਾਂ ਦੇ ਅੰਤ ਲਈ\r\nਦੀ ਵਰਤੋਂ ਕਰੋ। - response ਪੜ੍ਹਨ ਲਈ
catਜਾਂ ਇੱਕ loop ਦੀ ਵਰਤੋਂ ਕਰੋ। - ਕੰਮ ਖਤਮ ਹੋਣ 'ਤੇ file descriptor ਨੂੰ ਬੰਦ ਕਰ ਦਿਓ।
Example script:
HOST="example.com"
PORT=80
REQUEST_PATH="/"
exec 3<>/dev/tcp/${HOST}/${PORT}
printf "GET ${REQUEST_PATH} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3
cat <&3
exec 3>&-
ਇਹ ਤਕਨੀਕ ਤੁਹਾਨੂੰ ਇਹ ਸਮਝਣ ਵਿੱਚ ਮਦਦ ਕਰਦੀ ਹੈ ਕਿ clients ਅਤੇ servers ਇੱਕ ਦੂਜੇ ਨਾਲ ਕਿਵੇਂ ਗੱਲ ਕਰਦੇ ਹਨ। minimalist systems 'ਤੇ debugging ਲਈ ਇਹ ਇੱਕ ਲਾਭਦਾਇਕ ਹੁਨਰ ਹੈ।