আমি অনুমান করি এটি লিনাক্সের কাছাকাছি - নেটক্যাট ইউডিপি ট্র্যাফিকের জন্য শ্রবণ বন্ধ করে দেয় - সুপার ব্যবহারকারী , তবে আমি ভেবেছিলাম যে যাই হোক আরও ভাল জিজ্ঞাসা করব
নেটকাটের সংস্করণ হিসাবে আমি উবুন্টু ১১.০৪ ব্যবহার করছি এবং netcat
এটির মধ্যে পূর্বনির্ধারিত , যা আমি অনুমান করছি openbsd
:
$ nc
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
এটিই আমি অদ্ভুত বলে মনে করি: প্রথম কেসটি প্রত্যাশা অনুযায়ী কাজ করে - আমি একটি টার্মিনালে একটি ইউডিপি সার্ভারটি খুলি:
$ sudo nc -ul 5000
... এবং অন্য টার্মিনালে আমি একটি নতুন ইউডিপি ক্লায়েন্ট সংযোগ শুরু করি - এবং আমি hello
তিনবার টাইপ করি , প্রতিটিটির পরে ENTER টিপুন:
$ nc -u 127.0.0.1 5000
hello
hello
hello
^C
... এবং সার্ভার টার্মিনালে ফিরে গিয়ে, এটি hello
প্রত্যাশার মতো তিনবার মুদ্রিত হয়েছে:
$ sudo nc -ul 5000
hello
hello
hello
^C
এতদূর ভাল, সমস্ত প্রত্যাশার মতো কাজ করে। তবে, ধরা যাক আমি ক্লায়েন্টের ইনপুটটি পাইপ করে এখন একই চেষ্টা করছি; সুতরাং প্রথম একটি টার্মিনালে একটি ইউডিপি সার্ভার স্থাপন করুন:
$ sudo nc -ul 5000
... এবং অন্যটিতে nc
ইউডিপি ক্লায়েন্ট হিসাবে কিছু ডেটা পাইপ করুন:
$ echo hello | nc -u 127.0.0.1 5000
hello
hello
^C
... ক্লায়েন্ট কমান্ডের পরে, শেল সাজানো হিমশীতল যেমন ইনপুটটির জন্য অপেক্ষা করছে - তাই সেখানে আমি hello
আরও দু'বার টাইপ করেছি এবং ENTER করি ; তবে সার্ভারটি কেবলমাত্র প্রথমটি নিবন্ধভুক্ত করেছে hello
(যা পাইপ দিয়েছিল echo
)। তদুপরি, আপনি Ctrl-C টিপুন এবং ক্লায়েন্ট echo hello | nc -u 127.0.0.1 5000
কমান্ডটি পুনরায় চেষ্টা করার পরেও সার্ভারটি এখনও ঠিক প্রথম রিপোর্ট করার পরে থাকবে hello
:
$ sudo nc -ul 57130
hello
^C
... এবং কেবলমাত্র Ctrl-C দিয়ে সার্ভারটি বন্ধ করার পরে এবং এটি পুনরায় আরম্ভ করার পরে, কেউ ক্লায়েন্ট echo hello | nc -u 127.0.0.1 5000
আদেশটি পুনরাবৃত্তি করতে পারে এবং এটি কাজ করে পর্যবেক্ষণ করতে পারে।
এভাবে কি nc
আচরণ করার কথা? আমি আশা করব যে echo hello | nc -u 127.0.0.1 5000
সার্ভারটি পুনরায় চালু না করে কমপক্ষে বারবার কলগুলি নিবন্ধিত হবে? বা এই জাতীয় আচরণের জন্য সম্ভবত একটি বিশেষ কমান্ড-লাইন সুইচ আছে?
সম্পাদনা: আমি এই দুর্দান্ত পিডিএফ উপস্থাপনাটি পেয়েছি: সকেট - সমস্ত ধরণের সকেট পরিচালনা করা , যাতে নিম্নলিখিত netcat
বনাম socat
নোটগুলি রয়েছে:
নেটক্যাট - সীমাবদ্ধতাগুলি
● এক-শট কেবল (সকেট বন্ধের পরে শেষ হয়)
...
উদাহরণ 1: নেটক্যাট প্রতিস্থাপন
...
source উত্স পোর্ট সহ ইউডিপি ক্লায়েন্ট:
এনসি-
ইউ-পি 500 1.2.3.4 500 সকেট - ইউডিপি: 1.2.3.4: 500, এসপি = 500
● টিসিপি সার্ভার:
এনসি
-এল-পি 8080 সোকাট - টিসিপি-এল: 8080, পুনরায় ব্যবহার করুন
...
... তবে, আমি উপরের মতো একই রকম আচরণ পাচ্ছি, যদি আমি সার্ভার কমান্ডকে " socat - udp4-listen:5000,reuseaddr
" - এবং ক্লায়েন্ট লাইনটিকে " socat - udp:127.0.0.1:5000
" দিয়ে ... পাইপযুক্ত ইনপুট দিয়ে প্রতিস্থাপন করি তবে echo hello | socat - udp:127.0.0.1:5000
পার্থক্যটি হ'ল শব্দটি hello
প্রেরণের পরে এখানে কমান্ডটি কমপক্ষে উপস্থিত রয়েছে - তবে, আবার এই কমান্ডের একটানা রানগুলি সার্ভারে কোনও অভ্যর্থনা ঘটায় না, যতক্ষণ না সার্ভার পুনরায় চালু হয়।
cat $(echo -e "hello\nhello\nhello\n" > tmpf; echo tmpf) | nc -u 127.0.0.1 5000
"), তবে, আমি তিনটি দেখতে পাচ্ছিhello
, আমার কী ধাঁধা এখনও উপস্থিত রয়েছে: সেই আদেশটিও "লক" বাছাই করবে, যেন টাইপ করা ইনপুটটির জন্য অপেক্ষা করছে ব্যবহারকারী এবং Ctrl-C এবং পুনরায় চালু করার পরে, সার্ভারটি পুনরায় আরম্ভ না করা অবধি কোনও ডেটা দেখতে পাবে না !? এটিই আমি আরও ভালভাবে জানতে চাই - চিয়ার্স!