বাশ নিজেই প্রতিষ্ঠিত টিসিপি সংযোগটি কীভাবে শেষ করবেন?


17

আমি exec 3<>/dev/tcp/192.168.0.101/6435192.168.0.101:6435 এর সাথে একটি টিসিপি সংযোগ স্থাপন করেছি। এবং আমি pipeকমান্ড সহ কয়েকটি বার্তা প্রেরণ করার পাশাপাশি পেয়েছি ।

এখন, আমি টিসিপি সংযোগটি শেষ করতে চাই। তবে, ss -anpetআমি দেখতে পাচ্ছি যে কোনও বাচ্চা প্রক্রিয়া ভঙ্গ না করে বাশ নিজেই এই সংযোগটি ধারণ করে।

আমি ব্যাশ প্রক্রিয়ায় 9 এবং 15 সংকেত প্রেরণের চেষ্টা করেছি, তবে আপনি জানেন যে ব্যাশ নিজেকে হত্যা করতে পারে না।

সুতরাং, আমি যে টিসিপি সংযোগটি ব্যবহার করছি আমি যে পিটিএস ব্যবহার করছি তা বন্ধ না করে (মূল দ্বারা এটি হত্যা করা বা Ctrl + D প্রেরণ না করে) বন্ধ করে দিতে পারি?


আপনি কি আর একটি শেল পেতে পারেন bashএবং সেই শেলটি দিয়ে হত্যা করতে পারেন ?
ট্রাইসিস

3
bashঅবশ্যই নিজেকে হত্যা করতে পারে - যদিও এটি এখানে আপনি যা করতে চান তা আসলে তা নয়!
psmears

@ টিজেএম এই আকর্ষণীয় প্রশ্নটি অন্যদের জন্য আরও দরকারী করার জন্য, আপনি যে pipeকমান্ডটি ব্যবহার করছেন এবং যা আমার সিস্টেমে আমি খুঁজে পাচ্ছি না তার বিষয়ে আপনি কি দয়া করে বিশদটি জানাতে পারেন ? কোন প্যাকেজ pipeআসে? /dev/tcp/...সংযোগের উপর ডেটা প্রেরণ / গ্রহণ করতে আপনি কী (উদাহরণস্বরূপ) প্যারামিটারগুলি পাস করতে পারেন ? ধন্যবাদ।
আরিলফ

@ এরিফাল সাধারণত, আমি কম্পিউটার বিজ্ঞানের একটি শিক্ষানবিশ এবং আমি সেডবট নামক ব্যাশ শেল স্ক্রিপ্ট থেকে এই জাতীয় ব্যবহার পেয়েছি, আপনি এটি গিথুবটিতে খুঁজে পেতে পারেন। হ্যাঁ, আমি কোনও ফাইল খুঁজে পাই না /dev/tcp, এমনকি /dev/tcpনিজেও খুঁজে পাচ্ছি না । তবে, এটি একটি বিশেষ ব্যবহার বলে মনে হচ্ছে যা আপনি pipeএই জাতীয় ফাইলের সাথে ডেটা প্রেরণ / গ্রহণ করতে পারবেন । বলা হয়ে থাকে যে /dev/tcp/ip/portটিসিপি সংযোগের /dev/udp/ip/portজন্য এবং ইউডিপি প্যাকেজগুলির জন্য ব্যবহার করুন। আমার ইংরেজি খুব ভাল না, আমি কীভাবে এটি সঠিকভাবে ব্যাখ্যা করতে জানি না। দয়া করে প্রশ্নটি সম্পাদনা করে উত্তর পোস্ট করুন
টিজেএম

@ টিজেএম ধন্যবাদ প্রশ্নটি pipeআপনি যে আদেশটি উল্লেখ করেছেন তা সম্পর্কে ছিল । আমি তাকালাম https://github.com/clsr/sedbot/blob/master/sedbot.bash। কোন pipeআদেশ নেই। এটি দুটি ফাংশন সংজ্ঞায়িত করে: readmsgএবং sendmsgসংযোগ থেকে / যথাক্রমে পড়তে / লিখতে। readmsgব্যবহারসমূহ IFS= read -r -u 3 -t "$READ_TIMEOUT" lineপরিবর্তনশীল মধ্যে ফাইল-বর্ণনাকারী 3 থেকে পড়তে lineএবং sendmsgব্যবহার echo "$(date +%s.%N) >>> $line" >&4সম্পূর্ণ পদ্ধতি যাই হোক ফাইল বর্ণনাকারী 4. মধ্যে লিখুন, এই বর্ণনা করেন। " pipeকমান্ড" উল্লেখটি এখনও পাঠকদের কাছে একটি রহস্য হিসাবে রয়ে গেছে।
আরিফেল

উত্তর:


18

এই আদেশটি ফাইল বর্ণনাকারী 3 এ সংযোগটি খুলল 3 সুতরাং সংযোগটি বন্ধ করতে আপনার ফাইল বিবরণী 3 বন্ধ করতে হবে so এটি করার জন্য:

exec 3<&-

1
এটি কি কোনও উপযুক্ত shutdown(3)কল করবে, বা কেবল close(2)ফাইল বিবরণকারী?
কেভিন

একটি close, কিন্তু shutdownকাছাকাছি চেয়ে বেশি সঠিক নয়। shutdownযখন আপনি কেবল দ্বৈত সকেটের একপাশ বন্ধ করতে চান কেবল তখনই আসল ব্যবহার।
প্যাট্রিক


2
প্রথমে সমস্ত ডেটা না পড়ে সকেটটি বন্ধ করে দেওয়ার কারণে কেভিন আরএসটি হয় is আপনি যদি ডেটার শেষে পড়ে থাকেন এবং তারপরে একটি ক্লোজ করেন তবে ক্লোজটি একটি এফআইএন প্রেরণ করবে।
ক্যাস্পারড

@ ক্যাস্পার্ড: ইউনিক্স সকেট এপিআই-তে, ডেটা মুলতুবি রয়েছে কিনা তা জানার একমাত্র উপায় হ'ল হয় ননব্লকিং সকেট থেকে পড়ার চেষ্টা করা, বা এর মতো কিছু কল করা select(), এবং আমি বিশ্বাস করি না যে বাশ দুটি বিকল্পের জন্য সরবরাহ করেছে।
কেভিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.