স্টিডিন এবং স্টডআউটকে পোর্টে পুনর্নির্দেশ করুন


10

আমি এমন একটি প্রোগ্রাম নিতে চাই Pযা পাঠায় stdinএবং লিখেছেন stdout, তবে এটি ncএকটি নির্দিষ্ট বন্দর থেকে পড়া বা অন্য কোনও বন্দরের আউটপুটগুলির সাথে বা এটির সাথে সংযুক্ত করুন ।

# The reading is easy, here P reads from port 50505
nc -l 50505 | P

60606 পোর্ট বলতে কীভাবে এটি আবার লিখতে পারি?


আপনার প্রশ্নটি বিবৃত হিসাবে অস্পষ্ট। আপনি বোঝাতে চেয়েছেন যে কেউ আপনার মেশিনে 2 টিসিপি সংযোগ খুলতে পারে, একজন পোর্ট 50505 এবং অন্যটি 50506 পোর্ট করতে পারে, প্রথম টিডির জন্য ডেটা প্রেরণ করা যায় এবং দ্বিতীয় টিসিপি সংযোগটি থেকে Pআউটপুটটি পড়ার আশা করা Pযায়? কেন ইউডিপি ট্যাগ?
স্টাফেন চ্যাজেলাস

হ্যাঁ! যতদূর পর্যন্ত UDP, আমি মনে করি যে আমি চেয়েছিলাম ports, কিন্তু এটি একটি বিদ্যমান কীওয়ার্ড ছিল না, তাই আমি ভেবেছিলাম TCP, এবং আমি মনে করি আমি UDPপ্রতিবিম্বিত হয়েছি ।
ইয়িমিন রং

উত্তর:


12

আমি আপনাকে বলতে চাইছি যে কেউ আপনার মেশিনে 2 টিসিপি সংযোগ খুলতে পারে, একটি পোর্ট 50505 এবং অন্যটি 60606 বন্দর করতে পারে, প্রথমত পি তে খাওয়ানোর উদ্দেশ্যে ডেটা প্রেরণ করতে পারে এবং দ্বিতীয় টিসিপি সংযোগ থেকে পি এর আউটপুট পড়ার আশা করতে পারে, তাহলে তা হবে:

< /dev/null nc -q -1 -l 50505 | P | nc -l 60606 > /dev/null

বা সাথে socat:

socat -u tcp-listen:50505,reuseaddr - | P | socat -u - tcp-listen:60606,reuseaddr

Pতার আউটপুট একই সংযোগে ফেরত পাঠানোর জন্য :

socat tcp-listen:50505,reuseaddr exec:P

3

ncপোর্টগুলির সাথে কাজ করার জন্য আপনার দরকার নেই । bashএটি নিজেই করতে পারেন:

নীচের সারণিতে বর্ণিত হিসাবে বাশ পুনরায়নির্দেশে ব্যবহৃত হলে বিশেষত বেশ কয়েকটি ফাইলের নাম পরিচালনা করে:

/dev/fd/fd
    If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
    File descriptor 0 is duplicated.
/dev/stdout
    File descriptor 1 is duplicated.
/dev/stderr
    File descriptor 2 is duplicated.
/dev/tcp/host/port
   If host is a valid hostname or Internet address, and port is an integer 
   port number or service name, bash attempts to open a TCP connection to
   the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer 
    port number or service name, bash attempts to open a UDP connection to
    the corresponding socket.

3
/dev/tcpপ্রায়শই অক্ষম থাকে এবং শোনার জন্য ব্যবহার করা যায় না । আপনার zshযদি এমন শেল চান যা শ্রবণতনের টিসিপি সকেট তৈরি করতে পারে আপনার প্রয়োজন need
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস আমাকে স্বীকার করতে হবে আমি কখনও চেষ্টা করি নি। ম্যান পেজে এই সীমাবদ্ধতা সম্পর্কে কিছু বলা হয় না, তাই না?
হউক লেগেইজ

আচ্ছা, আপনি এটি কিভাবে করবেন? শ্রোতার সকেট আরও গ্রহণযোগ্য সকেট তৈরি করার একটি দরজা, পুনর্নির্দেশগুলি সে জন্য কাজ করে না। zsh এর জন্য একটি বিল্টিন ব্যবহার করে ( ztcp -lশোনার জন্য এবং শ্রোতার ztcp -aসকেটে সংযোগ গ্রহণ করার জন্য)।
স্টাফেন চ্যাজেলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.