echo command | netcat host port
কমান্ডের ফলে ফলাফল দূরবর্তী হোস্টে প্রেরণ করা হবে এবং কিছু ডেটা পাঠানো হবে। তবে কয়েক সেকেন্ড পরে সংযোগটি বন্ধ হয়ে যায়। -আর প্যারামিটারে কোনও পরিবর্তন হয়নি। আমি এসইএসই 10.1 এ নেটকাট v1.10 ব্যবহার করছি।
echo command | netcat host port
কমান্ডের ফলে ফলাফল দূরবর্তী হোস্টে প্রেরণ করা হবে এবং কিছু ডেটা পাঠানো হবে। তবে কয়েক সেকেন্ড পরে সংযোগটি বন্ধ হয়ে যায়। -আর প্যারামিটারে কোনও পরিবর্তন হয়নি। আমি এসইএসই 10.1 এ নেটকাট v1.10 ব্যবহার করছি।
উত্তর:
এটি nc
ওএস এক্স- এর কমান্ডের সাথে কাজ করে (আপনি যে আদেশটি প্রেরণ করতে চান তা কোনও ফাইলের মধ্যে রয়েছে) ধরে নেওয়া:
cat file - | nc host port
(মূলত, cat
স্টডআউটে ফাইলের সামগ্রীগুলি ফেলে দেয় এবং তারপরে স্ট্ডিনে আপনার জন্য অপেক্ষা করে) its
এক্সটেনশন দ্বারা, আপনি যদি শেল থেকে নিজেই কমান্ডটি প্রেরণ করতে চান তবে আপনি এটি করতে পারেন:
cat <(echo command) - | nc host port
{ echo command; cat;}
একই কাজ করবে এবং এটি বোঝার পক্ষে সহজ বলে বিবেচিত হবে।
netcat
কমান্ডটি সকেটটি উন্মুক্ত করে রাখবে যতক্ষণ না এটি ইনপুটটির শেষ দেখে। এই সমস্ত উদাহরণগুলি কেন এটি সম্পর্কে বেশি কিছু না বলে এটিকে প্রদর্শন করে । আমি কেবলমাত্র ব্যবহার করে একটি বর্ধিত সময়ের জন্য ব্যবহার করে সার্ভারের সাথে যোগাযোগ করছি । সকেট টেস্ট হ'ল একটি কার্যকর সরঞ্জাম যা কোনও টিসিপি বা ইউডিপি বন্দরে শুনতে বা পরিবেশন করতে পারে। SocketTest
netcat
cat - | nc localhost 8063
সঙ্গে nc
উবুন্টু করুন:
nc -q -1 host port
থেকে উবুন্টু nc
man পৃষ্ঠা :
-q seconds
after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
নোট করুন যে উপলভ্য nc
বিকল্পগুলি বিতরণের মধ্যে অনেকগুলি পৃথক হয়, তাই এটি আপনার (ওপেনসুএস) তে কাজ না করে।
আমি মনে করি না আপনি নেটকেট বা সাকট দ্বারা এটি পরিচালনা করছেন। আমি সবেমাত্র উভয়ের সাথেই বিস্তৃত টিঙ্কারিং করেছি এবং সাকাতটি সবচেয়ে প্রতিশ্রুতিবদ্ধ দেখাচ্ছে।
আমি দূরবর্তী টিসিপি পোর্টের সাথে সংযোগ স্থাপন এবং স্থানীয় ইউনিক্স ডোমেন সকেট (তাত্ত্বিকভাবে লিঙ্কটি সার্বক্ষণিকভাবে ধরে রাখা যেতে পারে) শুনতে শুনতে স্যাট আপ পরিচালনা করতে সক্ষম হয়েছি তবে ইউনিক্স সকেট থেকে স্থানীয় প্রক্রিয়াটি বিচ্ছিন্ন হওয়ার সাথে সাথে (অন্য একটি সকেট ইউনিক্স সকেটকে স্টিডিন / আউট এর সাথে সংযুক্ত করে) এটি টিসিপি সকেট সেশনটি বন্ধ করে দিয়েছে।
এখানে সমস্যাটি হ'ল নেটক্যাট / সাকটের মাধ্যমে প্রতিটি সংযোগ সার্ভারের সাথে একটি নতুন টিসিপি স্ট্রিম সংযোগ তৈরি করে এবং স্থানীয় প্রান্তটি সংযোগ বিচ্ছিন্ন হওয়ার পরে এটি টিসিপি স্ট্রিম সেশনটি বন্ধ করে দেয়।
আমি মনে করি আপনাকে সম্ভবত এটির জন্য কিছু কাস্টম প্রক্সি সফ্টওয়্যার লিখতে হবে যা রিমোট প্রান্তে টিসিপি সংযোগটি খোলে এবং তারপরে সকেট / পাইপ / ফিফো বা যে কোনও কিছুতে স্থানীয়ভাবে শুনবে এবং তারপরে বিদ্যমান টিসিপি পাইপটি কেবল ডেটা প্রেরণ করে এবং ফলাফলগুলি প্রদান করে।
এটি কি সকেটের অপর প্রান্তে সংযোগ বন্ধ রয়েছে?
ডিফল্টরূপে, nc
সমাপ্তির পরে সংযোগটি বন্ধ করে দেয়, যদি আপনি স্পষ্টভাবে তাকে শুনতে না চান ( -k
বিকল্পটি দিয়ে):
-k Forces nc to stay listening for another connection after its current
connection is completed. It is an error to use this option without the
-l option.
দেখুন man nc.1
।
আমি দুটি মেশিনের মধ্যে সফলভাবে ডেটা স্ট্রিম করছি:
প্রেরক:
while (true); do
echo -n "$RANDOM " | nc <host> <port>
done
রিসিভার:
nc -kl <port>
জর্জ 'পদ্ধতি একটি ইন্টারেক্টিভ শেল থেকে ভাল কাজ করে, কিন্তু স্ক্রিপ্টিং সঙ্গে সাহায্য, না করবে না যখন তুমি যেমন যেমন আপনার স্ক্রিপ্টটি কলিং nohup ./script &
।
আমি স্টাডিনের পরিবর্তে একটি ডামি ফিফো সহায়তা দিয়েছি।
mkfifo dummy
cat command.txt dummy | nc host port
যেহেতু কিছুই ফিফোতে লেখেনি, ফাইল আউটপুট দেওয়ার পরে, cat
এটি অনির্দিষ্টকালের জন্য ঝুলিয়ে রাখে।
socat
এর shut-none
বিকল্পটি এখানে সহায়তা করবে:
Changes the (address dependent) method of shutting down the write part of a connection to not do anything.
আপনাকে সম্ভবত ডিফল্ট টাইমআউট পিরিয়ড ব্যবহার করে ওভাররাইড করতে -t <timeout>
হবে, অন্যথায় সকেট 0.5 এর পরে বন্ধ হয়ে যাবে। এই বিকল্পটি ডিফল্ট আচরণকে ওভাররাইড করে, যা হ'ল:
When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates.
সুতরাং, একটি কমান্ড যেমন:
echo 'blah' | socat -t 10 stdio tcp:<addr>:<port>,shut-none
'ব্লাহ' প্রেরণের পরে সকেটটি 10 সেকেন্ডের জন্য উন্মুক্ত রাখবে।