নেটক্যাট প্রতিক্রিয়া মুদ্রণ করে না


12

আমি টিসিপি পোর্টে netcatপাইপ প্রতিক্রিয়া ব্যবহার করে পাইপ প্রতিক্রিয়া ব্যবহার করে কমান্ড প্রেরণের চেষ্টা করছি
যখন আমি চালিত হয়ে netcatআমার কমান্ডটি টাইপ করি তখন এটি সঠিকভাবে প্রতিক্রিয়া প্রিন্ট করে তবে যখন আমি পাইপ থেকে আদেশটি পাস করি এটি কমান্ডটি সঠিকভাবে প্রেরণ করে তবে প্রতিক্রিয়া মুদ্রণ করে না

সুতরাং, এটি সঠিকভাবে কাজ করে:

netcat  localhost 9009

যদিও এটি কেবল আদেশ প্রেরণ করে কিন্তু কোনও প্রতিক্রিয়া মুদ্রণ করে না:

echo 'my_command' | netcat  localhost 9009

কেন?
আমি কীভাবে netcatপ্রতিক্রিয়া পাঠ্য প্রিন্ট করতে পারি ?


এই সম্ভবত আপনি ঘটছে
জেফ স্ক্যালার হলেন

@ জেফ শ্যাচলার: না! দুর্ভাগ্যক্রমে এই আদেশগুলি ব্যবহার করে কোনও লাভ হয় না! এবার চিরকালের জন্য অবরুদ্ধ!
আরওয়াইএন

আপনি কোন নেটক্যাট ব্যবহার করছেন? দুর্ভাগ্যক্রমে নেটকাট সরঞ্জামটির এক ডজন বিভিন্ন প্রকরণ রয়েছে এবং তারা সকলে একই রকম আচরণ করে না। এছাড়াও, দূরবর্তী প্রান্তে কি আছে?
প্যাট্রিক

@ পেট্রিক: আমার নেটকাটটি OpenBSD netcat (Debian patchlevel 1.105-7ubuntu1)সংস্করণ; এবং দূরবর্তী প্রান্তে telegram-cliএকই মেশিনে রয়েছে।
আরওয়াইএন

আমি মনে করি যে আমি সেই নেটকেটের জন্য একটি ম্যান পৃষ্ঠা পেয়েছি, তবে আমি এমন কোনও পতাকা দেখছি না যা আমার সন্দেহ হচ্ছে যা ঘটছে তা নিয়ন্ত্রণ করবে control আমার সন্দেহ হয় যে netcatএটি এসটিডিনে একবার ইওএফ পেয়েছে, এটি অবিলম্বে একটি আধটি ঘনিষ্ঠ করার পরিবর্তে সকেটের উভয় দিকটি বন্ধ করে দেয় এবং দূরবর্তী দিকটি শেষ হওয়ার জন্য অপেক্ষা করে। যদি socatকোনও বিকল্প হয় তবে আমি পরিবর্তে এটির সুপারিশ করব। এখানে একটি মাত্র রয়েছে socat, তাই আপনার বহনযোগ্যতার সমস্যা নেই কারণ এটির এক ডজন বিভিন্ন স্বাদ রয়েছে, এটি অনেক বেশি বুদ্ধিমানের সাথে আচরণ করে এবং অত্যন্ত কনফিগারযোগ্য।
প্যাট্রিক

উত্তর:


8

@ পেট্রিক যেমন বলেছিলেন, সাধারণত netcatপ্রতিক্রিয়া দেওয়ার আগেই এই সমস্যাটি প্রস্থান করার কারণে ঘটে । আপনি প্রতিকার করেন যে -q 2কমান্ড লাইনে যুক্ত করে, অর্থাত্, netcatস্ট্যান্ডার্ড ইনপুটটিতে ইওএফ সনাক্তকরণের পরে প্রায় 2 সেকেন্ড স্থির থাকতে বলুন । স্পষ্টতই আপনি এটিকে কয়েক সেকেন্ডের জন্যও অপেক্ষা করতে পারেন।


ধন্যবাদ; -q 2কাজ করেছেন তবে কি এটি বিশ্বাসযোগ্য? এটি ওয়েব রিকুয়েস্ট করছে আমি নিশ্চিত হতে পারি না 2s সবসময়ই যথেষ্ট! আমি কি পারি ?
আরওয়াইএন

1
এটি আরও অপেক্ষা করতে আরও বড় সংখ্যা ব্যবহার করুন বা এটি অনির্দিষ্টকালের জন্য অপেক্ষা করতে কিছু নেতিবাচক সংখ্যা ব্যবহার করুন। এর রয়েছে -wসাথে খেলতে বিকল্প। এটি man ncঅবশ্যই পৃষ্ঠায় রয়েছে।
রাল্ফ রনকুইস্ট

5
এটি বলেinvalid option -- 'q'
ফিলি 294

আমি মনে করি একটি ভাল ফলো-আপ প্রশ্ন হ'ল: কেন ncকোনও প্রতিক্রিয়া অপেক্ষা করার পরিবর্তে তাত্ক্ষণিকভাবে প্রস্থান করা হচ্ছে? যদি সংযোগটি এখনও খোলা থাকে, ncকেবল
স্টিডিনের

6

এটা ব্যবহার কর:

cat <(echo command) - | nc host port

সমস্যাটি হ'ল ncস্টিডিন বন্ধ হওয়ার সাথে সাথে সংযোগটি বন্ধ হয়ে যাবে, এটি একটি সরল my_commandস্ট্রিংয়ের জন্য খুব দ্রুত এবং এইভাবে কোনও প্রতিক্রিয়া পাওয়ার সুযোগ কখনই পায় না। (আপনি যদি কোনও খুব বড় ফাইলটি পাইপ করেন তবে দেখবেন ফাইলটি প্রেরণের আগে এটি কোনও প্রতিক্রিয়া পেতে পারে)।

লিখুন catসঙ্গে -দ্বিতীয় আর্গুমেন্ট হিসাবে: এটা তোলে catপরে এটি প্রথম আর্গুমেন্ট বিষয়বস্তু পাঠিয়েছেন মাধ্যমে পাইপ আরো বিষয়বস্তুর জন্য stdin শুনতে। প্রথম যুক্তিটি কেবল echoকমান্ডটি পেয়েছে cat- এটি আপনার কমান্ডের একটি লাও হতে পারে cat < file - | ...

বিকল্পভাবে এটি করুন:

(echo command; while true; do sleep 0.01; echo -n "#"; done) | nc host port

এটি ইনপুটটির #২ য় লাইনে সীমাহীন অক্ষরগুলি প্রেরণ করে। #রিমোটের মতো ব্যাশের কাজ করে যা এটিকে মন্তব্য হিসাবে উপেক্ষা করবে। আমি এখানে 10 মিলিসেকেন্ডের জন্য একটি ছোট অপেক্ষা করার সময়টি বেছে নিয়েছি, সুতরাং এটি সংযোগের শেষে দ্রুত প্রতিক্রিয়া জানায়। YMMV।

এর খারাপ দিকটি সে catবা whileলুপ হতে পারে এবং ncআপনি আঘাত না করা ^Cবা ^Dশেল পর্যন্ত চালিয়ে যেতে পারেন । এটি সত্যই দূরবর্তী প্রান্তের উপর নির্ভর করে।

-w 1(ওএসএক্স নেটক্যাট) বা -i 1(এনএমএপ এর এনসিএটি) ব্যবহার করে একটি টাইমআউট যুক্ত করা এটিকে সংযোগটি বন্ধ করে দেয় এবং nc1 সেকেন্ডের পরে, তবে catআপনি কিছু চরিত্র প্রবেশ না করা এবং পাইপ বিচ্ছিন্ন হওয়া পর্যন্ত আমার চলতে থাকবে (আমি মনে করি)।

তবে, এটি কাজ করে যদি দূরবর্তী পক্ষটি কমান্ডটি গ্রহণ ও পরিচালনা করার পরে স্বয়ংক্রিয়ভাবে সংযোগটি বন্ধ করে দেয় - এটি ncক্লায়েন্ট এবং এটিতে পাইপিং প্রক্রিয়াটিও শেষ করবে।

এই উত্তরটি একটি অনুরুপ সুপারউসার প্রশ্নের এই উত্তরটির ভিত্তিতে তৈরি ।


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

1

ভিন্ন openbsd-netcat সংস্করণ বিভিন্ন সমন্বয় প্রয়োজন, করা বিচিত্র হয় -w <seconds>, -q <seconds>, -Nএবং এমনকি প্রয়োজন বিভিন্ন কি সংযোগ অন্য প্রান্তে চলতে থাকে তার উপর নির্ভর করে আর্গুমেন্ট। নির্দিষ্ট সংস্করণ বা সার্ভারের সাথে টাইমআউট বিকল্পগুলি ব্যবহারের ফলে বিলম্ব হয় এবং সেগুলি না ব্যবহারের ফলে খুব দীর্ঘ (অসীম?) বিলম্ব হতে পারে। এবং আমি gnu নেটক্যাট দিয়ে বিভিন্ন quirks আশা করব, তবে এটির সংস্করণগুলির মধ্যে আলাদা কিনা তা জানি না don't

উদাহরণস্বরূপ সংস্করণ 1.130_3 থেকে যখন আমি এটি করি তখন অত্যন্ত দীর্ঘ (চিরকাল?) লাগে:

$ echo response | nc -l 9999 &
[1] 15190

$ time echo request | nc localhost 9999
request
response

(wait forever possibly)

তবে এটি সার্ভার বা ক্লায়েন্টের সাথে যোগ করা -N এর সাথে কাজ করে।


1

আমি জানি এটি কিছুটা পুরানো তবে অন্য কোনও উত্তর আমার পক্ষে কাজ করে নি এবং এটি করেছে:

echo 'test' | netcat -N $server $port

লক্ষ্য করুন -N:

ইনপুটটিতে EOF এর পরে নেটওয়ার্ক সকেটটি বন্ধ করুন shut কিছু সার্ভারগুলির কাজ শেষ করার জন্য এটির প্রয়োজন।

উইন্ডোজ এবং লিনাক্স উভয় ক্ষেত্রেই আমার জন্য কাজ করেছেন।

নোট: এই উত্তরটি আমি জন্য পোস্ট একটি কপি পেস্ট ডুপ্লিকেট প্রশ্ন

আমি ভাবছি এটি কার্যকর হতে পারে। মোডগুলি নীতি বা কোনও কিছুর বিরোধী হলে সম্পাদনা / মোছা নির্দ্বিধায় মনে করে।

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