আমি কীভাবে এমন নেটকেটকে কমান্ড পাইপ করতে পারি যা বেঁচে থাকবে?


32
echo command | netcat host port

কমান্ডের ফলে ফলাফল দূরবর্তী হোস্টে প্রেরণ করা হবে এবং কিছু ডেটা পাঠানো হবে। তবে কয়েক সেকেন্ড পরে সংযোগটি বন্ধ হয়ে যায়। -আর প্যারামিটারে কোনও পরিবর্তন হয়নি। আমি এসইএসই 10.1 এ নেটকাট v1.10 ব্যবহার করছি।


আপনি কি নিশ্চিত যে সংযোগটি বন্ধ করে দেওয়া কোনও দূরবর্তী হোস্ট নয়?
মাধ্যাকর্ষণ

হ্যাঁ। নেটকাট করা এবং তারপরে ম্যানুয়ালি কমান্ডটি টাইপ করার ফলে নেটক্যাট অনির্দিষ্টকালের জন্য বেঁচে থাকবে।
ক্রিস

কেন বেঁচে থাকবে? এটি শুধু ইকো প্যারামিটারগুলি মুদ্রণ করে মারা যায়?
M'vy

1
আমি এটি বেঁচে থাকতে চাই যাতে এটি দূরবর্তী সার্ভার থেকে আসা ডেটা পেতে থাকে।
ক্রিস

2
এটা সত্যি না. "নেটকাট <হোস্ট> <port>" একটি দ্বি নির্দেশমূলক টিসিপি সকেট খুলবে।
ক্রিস

উত্তর:


33

এটি ncওএস এক্স- এর কমান্ডের সাথে কাজ করে (আপনি যে আদেশটি প্রেরণ করতে চান তা কোনও ফাইলের মধ্যে রয়েছে) ধরে নেওয়া:

cat file - | nc host port

(মূলত, catস্টডআউটে ফাইলের সামগ্রীগুলি ফেলে দেয় এবং তারপরে স্ট্ডিনে আপনার জন্য অপেক্ষা করে) its

এক্সটেনশন দ্বারা, আপনি যদি শেল থেকে নিজেই কমান্ডটি প্রেরণ করতে চান তবে আপনি এটি করতে পারেন:

cat <(echo command) - | nc host port

এটি খুব খালি হাড়গুলি এমবেডেড সিস্টেমে কাজ করার কারণে এটি দুর্দান্ত, যেখানে নেটক্যাটটিতে অভিনব বিকল্পগুলির অভাব রয়েছে।
এসএফ

{ echo command; cat;}একই কাজ করবে এবং এটি বোঝার পক্ষে সহজ বলে বিবেচিত হবে।
জি-ম্যান

1
আমি এটি দেখতে পাচ্ছি netcatকমান্ডটি সকেটটি উন্মুক্ত করে রাখবে যতক্ষণ না এটি ইনপুটটির শেষ দেখে। এই সমস্ত উদাহরণগুলি কেন এটি সম্পর্কে বেশি কিছু না বলে এটিকে প্রদর্শন করে । আমি কেবলমাত্র ব্যবহার করে একটি বর্ধিত সময়ের জন্য ব্যবহার করে সার্ভারের সাথে যোগাযোগ করছি । সকেট টেস্ট হ'ল একটি কার্যকর সরঞ্জাম যা কোনও টিসিপি বা ইউডিপি বন্দরে শুনতে বা পরিবেশন করতে পারে। SocketTest netcatcat - | nc localhost 8063
হবে

14

সঙ্গে ncউবুন্টু করুন:

nc -q -1 host port

থেকে উবুন্টু ncman পৃষ্ঠা :

 -q seconds
         after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.

নোট করুন যে উপলভ্য ncবিকল্পগুলি বিতরণের মধ্যে অনেকগুলি পৃথক হয়, তাই এটি আপনার (ওপেনসুএস) তে কাজ না করে।


13

আমি এটি খুঁজে পেয়েছি:

echo command | netcat host port -

আমার সহকর্মী এটি জানতেন। আমি ডকুমেন্টেশনে এটি মোটেও দেখতে পাচ্ছি না।


2

আমি মনে করি না আপনি নেটকেট বা সাকট দ্বারা এটি পরিচালনা করছেন। আমি সবেমাত্র উভয়ের সাথেই বিস্তৃত টিঙ্কারিং করেছি এবং সাকাতটি সবচেয়ে প্রতিশ্রুতিবদ্ধ দেখাচ্ছে।

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

এখানে সমস্যাটি হ'ল নেটক্যাট / সাকটের মাধ্যমে প্রতিটি সংযোগ সার্ভারের সাথে একটি নতুন টিসিপি স্ট্রিম সংযোগ তৈরি করে এবং স্থানীয় প্রান্তটি সংযোগ বিচ্ছিন্ন হওয়ার পরে এটি টিসিপি স্ট্রিম সেশনটি বন্ধ করে দেয়।

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


সর্বশক্তিমান ম্যাট জেনকিন্স শুনুন: ডি
এমবি

2

এটি কি সকেটের অপর প্রান্তে সংযোগ বন্ধ রয়েছে?

ডিফল্টরূপে, 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> 
    

1

জর্জ 'পদ্ধতি একটি ইন্টারেক্টিভ শেল থেকে ভাল কাজ করে, কিন্তু স্ক্রিপ্টিং সঙ্গে সাহায্য, না করবে না যখন তুমি যেমন যেমন আপনার স্ক্রিপ্টটি কলিং nohup ./script &

আমি স্টাডিনের পরিবর্তে একটি ডামি ফিফো সহায়তা দিয়েছি।

 mkfifo dummy
 cat command.txt dummy | nc host port

যেহেতু কিছুই ফিফোতে লেখেনি, ফাইল আউটপুট দেওয়ার পরে, catএটি অনির্দিষ্টকালের জন্য ঝুলিয়ে রাখে।


0

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 ​​সেকেন্ডের জন্য উন্মুক্ত রাখবে।


0

আপনার কমান্ডটি সমাপ্ত হয়, যদি হয় দূরবর্তী হোস্ট সংযোগটি বন্ধ করে দেয় (বা পৌঁছনীয় নয়) অথবা পাইপটি শেষ হওয়ার আগে কমান্ডটি (যখন নেটক্যাট তার বাকি ইনপুট সারিটি প্রেরণ করে)।

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