</> কেন / ডিভ / টিসিপি ব্যবহারের প্রয়োজন


13

কল করার চেষ্টা করার সময় /dev/tcp/www.google.com/80, টাইপ করে

/dev/tcp/www.google.com/80

বাশ বলে no such file or directory। অনলাইনে অন্য ব্যক্তির কোড দেখার সময় তারা সিনট্যাক্স ব্যবহার করে

 3<>/dev/tcp/www.google.com/80

আমি লক্ষ্য করেছি যে এটি কাজ করে:

</dev/tcp/www.google.com/80

এই প্রতীকগুলিকে ব্যাশে কিছু নির্দিষ্ট জিনিস কল করার প্রয়োজন কেন?


2
"কল" বলতে কী বোঝ? আপনি যখন ত্রুটি পান তবে দয়া করে আমাদের কী করুন show আপনি কি এটি কার্যকর করার চেষ্টা করছেন? এমনকি গুগলের প্রথম পৃষ্ঠাটি এক্সিকিউটেবল কোড হলেও, আমি এটির প্রস্তাব দেব না।
ctrl-alt-delor

/dev/tcp/www.google.com/80
জন

আমি আপনার প্রশ্নটি সম্পাদনা করেছিলাম, আপনি যা বলতে চাইছেন তা বলতে।
ctrl-alt-delor

উত্তর:


29

কারণ এটি শেলের (ksh এর, বাশ দ্বারা অনুলিপি করা) এবং কেবল শেলের একটি বৈশিষ্ট্য।

/dev/tcp/...সত্যিকারের ফাইল নয়, শেলটি কোনও /dev/tcp/...ফাইলে পুনর্নির্দেশের প্রয়াসকে বাধা দেয় এবং তারপরে সেই ক্ষেত্রে (সেই ফাইলটি খোলার socket(...);connect(...)) পরিবর্তে একটি open("/dev/tcp/..."...)( একটি টিসিপি সংযোগ তৈরি করে) করে ।

মনে রাখবেন এটি এর মতো বানান করতে হবে। cat < /dev/./tcp/...বা ///dev/tcp/...কাজ করবে না এবং পরিবর্তে এই ফাইলগুলি খোলার চেষ্টা করবে (যা বেশিরভাগ সিস্টেমে উপস্থিত নেই এবং আপনি একটি ত্রুটি পাবেন)।

পুনঃনির্দেশের দিকটিও কিছু যায় আসে না। আপনি ব্যবহার 3< /dev/tcp/...বা 3> /dev/tcp/...বা 3<> /dev/tcp/...এমনকি 3>> /dev/tcp/...কোনও পার্থক্য না করা, আপনি যে টিসিপি সকেটের উপর ডেটা পেতে / প্রেরণ করতে / ফাইল ফাইলটি থেকে / লিখতে উভয়ই সক্ষম হতে পারবেন।

আপনি যখন cat /dev/tcp/...করেন, এটি কাজ করে না কারণ catএকই বিশেষ হ্যান্ডলিংটি কার্যকর করে না, এটি open("/dev/tcp/...")প্রতিটি ফাইলের জন্য (ব্যতীত -) কেবল একটি শেল (কেএসএস, কেবল বাশ) করে এবং কেবল পুনর্নির্দেশের লক্ষ্যমাত্রার জন্য।

এটি cat -বিশেষতভাবে পরিচালিত কোনও ফাইল পাথের আরেকটি উদাহরণ। open("-")এটি না করে এটি সরাসরি ফাইল বর্ণনাকারী 0 (স্টিডিন) থেকে পড়ে। catএবং অনেকগুলি পাঠ্য ইউটিলিটিগুলি তা করে, শেলটি তার পুনঃনির্দেশগুলির জন্য করে না। -ফাইলের বিষয়বস্তু পড়তে আপনার প্রয়োজন হয় cat ./-, বা cat < -(বা cat - < -)। যেসব সিস্টেমে নেই /dev/stdin, bashসেগুলিতে সেই (ভার্চুয়াল) ফাইল থেকে পুনঃনির্দেশের জন্য একই জাতীয় কিছু করবে। গনুহ awkজন্য একই আছে /dev/stdin, /dev/stdout, /dev/stderrএমনকি সিস্টেম না যে এই ধরনের ফাইল যা লিনাক্স মত সিস্টেমে কিছু চমকের সৃষ্টি করতে পারে যেখানে ঐ ফাইল ভিন্নভাবে আচরণ উপর।

zshএছাড়াও টিসিপি (এবং ইউনিক্স ডোমেন স্ট্রিম) সকেট সমর্থন রয়েছে, তবে এটি একটি ztcp(এবং zsocket) বিল্টিন দিয়ে সম্পন্ন হয়েছে , সুতরাং এটি ksh / বাশ পদ্ধতির চেয়ে কম সীমাবদ্ধ। বিশেষত, এটি সার্ভার হিসাবেও কাজ করতে পারে যা ksh / bash করতে পারে না। যদিও আপনি বাস্তব প্রোগ্রামিং ভাষায় যা করতে পারেন তার থেকে এটি এখনও অনেক বেশি সীমাবদ্ধ।


4

আপনি ধারণাগুলি বিভ্রান্ত করছেন বা কোনও ফাইল পড়েছেন এবং একটি কমান্ড কার্যকর করছেন বলে মনে হচ্ছে। ডেটা এবং নির্দেশের মধ্যে পার্থক্য।

গুগলস এর প্রথম পৃষ্ঠাটি একটি সম্পাদনযোগ্য প্রোগ্রাম নয়। এবং যদি এটি হয় তবে এটি চালানো নিরাপদ হবে না।

পুনঃনির্দেশের অক্ষর (সহ <এবং >), একটি কমান্ডে ডেটা নির্দেশ করতে ব্যবহৃত হয়।

আমরা করতে পারি cat < /dev/tcp/towel.blinkenlights.nl/23তবে এটি কাজ করবে না কারণ /dev/tcp/www.google.com/80আমরা না পাঠানো পর্যন্ত এই বন্দরটি প্রতিক্রিয়া জানায় নাGET / HTTP/1.0\r\n\r\n

তাই চেষ্টা করুন

{
  printf >&3 'GET / HTTP/1.0\r\n\r\n'
  cat <&3
} 3<>/dev/tcp/www.google.com/80

1
ফাইলটি উপস্থিত থাকলে কিন্তু কার্যকর না হলে আপনি একটি ভিন্ন ত্রুটি পাবেন।
বার্মার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.