পাইপিং এবং ইউডিপির সাথে নেটকেট / স্যাকট আচরণ?


16

আমি অনুমান করি এটি লিনাক্সের কাছাকাছি - নেটক্যাট ইউডিপি ট্র্যাফিকের জন্য শ্রবণ বন্ধ করে দেয় - সুপার ব্যবহারকারী , তবে আমি ভেবেছিলাম যে যাই হোক আরও ভাল জিজ্ঞাসা করব

নেটকাটের সংস্করণ হিসাবে আমি উবুন্টু ১১.০৪ ব্যবহার করছি এবং 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প্রেরণের পরে এখানে কমান্ডটি কমপক্ষে উপস্থিত রয়েছে - তবে, আবার এই কমান্ডের একটানা রানগুলি সার্ভারে কোনও অভ্যর্থনা ঘটায় না, যতক্ষণ না সার্ভার পুনরায় চালু হয়।

উত্তর:


23

ঠিক আছে, আমি মনে করি কমপক্ষে আমি কিছু পেয়েছি socat- যথা, forkসার্ভার লাইনে বিকল্পটি সংযুক্ত করা দরকার:

$ socat - udp4-listen:5000,reuseaddr,fork

... এবং তারপরে, অন্য টার্মিনালে, আমরা কমান্ড লাইনে ক্লায়েন্ট লাইনে একাধিকবার echoপাইপিং কল করতে পারি socat, কারণ এটি অবিলম্বে প্রস্থান করা হবে ( ভাল, অর্ধেক পরে :) ):

$ echo "hello" | socat - udp-sendto:127.0.0.1:5000
$ echo "hello" | socat - udp-sendto:127.0.0.1:5000
$ echo "hello" | socat - udp-sendto:127.0.0.1:5000

... এবং প্রথম টার্মিনালে ফিরে গিয়ে আমরা দেখতে পাচ্ছি যে সার্ভারটি তিনটি helloগুলি সাফল্যের সাথে দেখিয়েছে :

$ socat - udp4-listen:5000,reuseaddr,fork
hello
hello
hello
^C

 

নোট করুন যে এমনকি একটি- forkএড socatসার্ভারের সাথে, লাইনটি echo "hello" | nc -u 127.0.0.1 5000এখনও 'লক' করবে যেন ব্যবহারকারী ইনপুটটির জন্য অপেক্ষা করছে; তবে, এখন Ctrl-C এর পরে এবং কমান্ডটি পুনরায় চালু করার অর্থাত্‍,

$ echo "hello" | nc -u 127.0.0.1 5000
^C
$ echo "hello" | nc -u 127.0.0.1 5000
^C
$ echo "hello" | nc -u 127.0.0.1 5000
^C

... fork-যুক্ত socatসার্ভারটি helloপুনরায় আরম্ভ করার প্রয়োজন ছাড়াই তিনটি প্রদর্শন করবে ..

 

আপাতদৃষ্টিতে, এই ওপেনবিএসডি-র netcatকোনও forkবিকল্প নেই - তবে আমি নিশ্চিত নই যে এটির সাথে এটির মতো একটি রয়েছে কিনা ..

যাইহোক, আশা করি এটি কাউকে সাহায্য করবে,
চিয়ার্স!


4

আপনার পাইক ব্যবহার করার সময় আপনার নেটক্যাটটি কেবল প্রতিধ্বনির স্টডআউট থেকে আউটপুট পড়ছে, এটি আর কীবোর্ডের সাথে "সংযুক্ত" নয় not আপনি যে প্রতিক্রিয়াটি প্রত্যাশা করছেন তা পেতে, আপনি আপনার তিনটি "হ্যালো" গুলি একটি ফাইল চালাতে যোগ করতে পারেন

cat [myfile] | nc -u 127.0.0.1 5000

হাই @ ওल्डওল্ফ - আপনার উত্তরের জন্য অনেক ধন্যবাদ! আমি আপনার পরামর্শটি চেষ্টা করেছি (আরও কিছুটা সংশ্লেষিত উপায়ে, " cat $(echo -e "hello\nhello\nhello\n" > tmpf; echo tmpf) | nc -u 127.0.0.1 5000"), তবে, আমি তিনটি দেখতে পাচ্ছি hello, আমার কী ধাঁধা এখনও উপস্থিত রয়েছে: সেই আদেশটিও "লক" বাছাই করবে, যেন টাইপ করা ইনপুটটির জন্য অপেক্ষা করছে ব্যবহারকারী এবং Ctrl-C এবং পুনরায় চালু করার পরে, সার্ভারটি পুনরায় আরম্ভ না করা অবধি কোনও ডেটা দেখতে পাবে না !? এটিই আমি আরও ভালভাবে জানতে চাই - চিয়ার্স!
sdaau

2
এনসি একটি ইওএফের জন্য অপেক্ষা করছে যা এই ক্ষেত্রে, আপনি প্রোগ্রামটিতে প্রস্থান সিগন্যাল না পাঠানো পর্যন্ত এটি পায় না।
ওল্ড ওল্ফ

আহ, আমি দেখতে পেয়েছি - @ অলডল্ফ! আপাতদৃষ্টিতে বিকল্পটির socatসাথে এগুলি কাজ করতে পারে fork... আবার ধন্যবাদ, চিয়ার্স!
sdaau

3

আপনি যদি শ্রোতা এনসি-এর কোনও স্ট্রেস করেন, এটি দেখিয়ে দেবে যে নেটক্যাট সংযোগের জন্য অপেক্ষা করছে, এবং এটিটি একবার পেয়ে গেলে, অন্য সকলকে উপেক্ষা করে সেই হোস্ট এবং বন্দরের সাথে সংযুক্ত হবে। চালিয়ে যেতে আপনাকে '-কে' যুক্ত করতে হবে এবং 0-সেকেন্ড পরে প্রতিটি সংযোগের সময়সীমা শেষ করতে '-w 0' যুক্ত করতে হবে। সাকট একটি ভাল পছন্দ, আমি মনে করি।

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