লিনাক্সে টিসিপি টানেল বিশেষ অক্ষর ডিভাইস হিসাবে প্রকাশ করা সম্ভব?


10

সম্প্রতি আমি কিউএনএক্স ডকুমেন্টেশনে পেয়েছি যে এটি সিরিয়াল ডিভাইস ( dev/serX) ব্যবহার করে পৃথক শারীরিক মেশিনে প্রক্রিয়াগুলির মধ্যে বার্তা ভিত্তিক আইপিসি সেট করতে দেয় এবং এটি আমাকে অবাক করে তোলে:

টিসিপি / ইউডিপি সুড়ঙ্গের জন্য সিস্টেম-প্রশস্ত বিশেষ ডিভাইস তৈরি করা কি লিনাক্সে সম্ভব? ncস্ট্যান্ডিন / স্টডআউটের মতো কিছু প্রকাশ্যে / ডেভ / কোনও কিছুতে প্রকাশিত।

শেষ পর্যন্ত আমি একটি মেশিনে এই জাতীয় ফাইলটিতে কিছু লিখতে সক্ষম হতে চাই এবং অন্য প্রান্তে উদাহরণস্বরূপ এটি গ্রহণ করতে পারি:

#machine1:
echo "Hello" > /dev/somedev

#machine2:
cat < /dev/somedev

আমি ncমানুষের দিকে একবার নজর রেখেছি তবে স্টোডিও ব্যতীত io উত্স / গন্তব্য নির্দিষ্ট করার কোনও বিকল্প পাইনি।



1
সম্মানজনক উল্লেখ: টিউন / ট্যাপ ডিভাইসগুলি / ডিভ মধ্যে তৈরি করা যেতে পারে তবে সেগুলি আপনাকে নিজেই আইপি এনক্যাপসুলেশন করতে হবে। কিছু উদ্দেশ্যে অত্যন্ত কার্যকর।
pjc50

উত্তর:


19

socat "স্ট্রিম" এর অনুরূপ জিনিসগুলির সাথে এটি এবং আরও অনেক কিছুই করতে পারে

এই মৌলিক ধারণাটি ব্যবহার করার কিছু আপনার পক্ষে করা উচিত:

Machine1$ socat tcp-l:54321,reuseaddr,fork pty,link=/tmp/netchardev,waitslave

Machine2$ socat pty,link=/tmp/netchardev,waitslave tcp:machine1:54321

( উদাহরণ পৃষ্ঠা থেকে অভিযোজিত )

আপনি যদি এনক্রিপ্ট করতে চান, আপনি মেশিন 1-এ এবং মেশিন 2-তে এর ssl-l:54321,reuseaddr,cert=server.pem,cafile=client.crt,forkমতো কিছু ব্যবহার করতে পারেনssl:server-host:1443,cert=client.pem,cafile=server.crt

( স্যাট এসএসএল সম্পর্কে আরও )


7

বার্তা-পাসিং একটি উচ্চ স্তরে প্রয়োগ করা প্রয়োজন; টিসিপিতে কোনও বার্তার ধারণা নেই - টিসিপি সংযোগগুলি অক্টেটের স্ট্রিমগুলি প্রবাহ করে।

আপনি পাইপগুলির সাথে নামকরণnc এবং নামকরণের মতো সাজানোর মতো কিছু অর্জন করতে পারেন , দেখুন man mkfifo; অথবা socatঅ্যালেক্স স্ট্রজি ইঙ্গিত হিসাবে পরীক্ষা করুন ।

মাঝারি স্তরের পরিষেবা ব্যতীত প্রাথমিক সমস্যাগুলি হ'ল (১) অন্য প্রান্তে কেউ না শুনলে নেটওয়ার্কে ডেটা লেখা যায় না এবং (২) টিসিপি সংযোগ দ্বি-দিকনির্দেশক।

যেহেতু আপনি নেটওয়ার্কে ডেটা লিখতে পারবেন না যদি না কেউ এর জন্য শোনেন তবে আপনার ডেটা প্রেরণের আগে আপনাকে অবশ্যই সর্বদা শ্রোতাদের শুরু করতে হবে। (একটি বার্তা প্রেরণ সিস্টেমে বার্তাগুলি পরিচালনা করার প্রক্রিয়াটি এক ধরণের বাফারিং সরবরাহ করবে))

আপনার উদাহরণ সহজেই আবার লেখা যেতে পারে:

  • প্রথমে মেশিন 2 (গন্তব্য) এ শ্রোতা শুরু করুন:

     nc -l 1234 | ...some processing with the received data...
    

    আপনার উদাহরণে, এটি হবে

     nc -l 1234 | cat
    

    এটি ব্লক করবে এবং 1234 পোর্টে কেউ ডেটা প্রেরণের জন্য অপেক্ষা করবে।

  • তারপরে আপনি মেশিন 1 (উত্স) থেকে কিছু ডেটা প্রেরণ করতে পারেন:

    ...make up some data... | nc machine2 1234
    

    আপনার উদাহরণে, এটি হবে

     echo "Hello" | nc machine2 1234
    

আপনি যদি কোনও উপায়ে প্রাপ্ত ডেটা প্রক্রিয়া করতে চান এবং প্রতিক্রিয়া জানাতে চান তবে আপনি শেলের কপ্রোসেসিং সুবিধাটি ব্যবহার করতে পারেন। উদাহরণস্বরূপ, এটি একটি খুব সাধারণ (এবং খুব জেদী) ওয়েব সার্ভার:

#! /bin/bash

while :; do
  coproc ncfd { nc -l 1234; }
  while :; do
    read line <&${ncfd[0]} || break
    line="$(
      echo "$line" |
      LC_ALL=C tr -cd ' -~'
    )"
    echo >&2 "Received: \"$line\""
    if [ "$line" = "" ]; then
      echo >&${ncfd[1]} "HTTP/1.0 200 OK"
      echo >&${ncfd[1]} "Content-Type: text/html"
      echo >&${ncfd[1]} "Connection: close"
      echo >&${ncfd[1]} ""
      echo >&${ncfd[1]} "<title>It works!</title>"
      echo >&${ncfd[1]} "<center><b>It works!</b></center>"
      echo >&${ncfd[1]} "<center>-- $(date +%Y-%m-%d\ %H:%M:%S) --</center>"
      break
    fi
  done
  kill %%
  sleep 0.1
done

অ্যারেতে ফাইল বর্ণনাকারী ব্যবহার করে কীভাবে স্ক্রিপ্টের মূল অংশ এবং কপ্রোসিসের মধ্যে দ্বি-নির্দেশমূলক যোগাযোগ অর্জন করা হয় তা দেখুন $ncfd


আপনি ঠিক বলেছেন, এবং আমি উত্তরে স্বীকার করেছি। কোনও ধরণের মধ্যস্থতা সফ্টওয়্যার ছাড়া একটি অক্ষর ডিভাইস থাকতে পারে না।
অ্যালেক্সপি

দেখে মনে হচ্ছে আপনার কোনও ইউইওসি আছে।
মাইকেল হ্যাম্পটন

1
@ মিশেলহ্যাম্পটন: ওপি কর্তৃক প্রদত্ত এটি উদাহরণ। আমি মনে করি এটি cat"স্টাডিনের জন্য কিছু প্রক্রিয়া পড়ার" জন্য দাঁড়িয়েছে।
অ্যালেক্সপ

5

আপনি যদি এনসি এর মতো একটি বেসিক প্রোগ্রামটি ব্যবহার করে কেবল দুটি কম্পিউটার সংযোগ করতে চান তবে আপনি থেকে / এ পুনঃনির্দেশ করতে পারেন /dev/tcp/<host>/<port>

এগুলি প্রকৃত ডিভাইস নয় তবে বাশ দ্বারা নির্মিত একটি কল্পকাহিনী, সুতরাং জিনিসগুলি যেমন cat /dev/tcp/foo/19কাজ করে না তবে তা cat < /dev/tcp/foo/19করবে।

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