সর্বশেষ ফাইলটি ওভাররাইট না করে নেটকাটে একসাথে একাধিক ফাইল প্রাপ্ত


0

1 মেশিন শোনায় (লিনাক্স), যখন একাধিক ক্লায়েন্ট (উইন্ডোজ) একে এবং একই শ্রবণ পোর্টে ফাইল পাঠায়। নেটক্যাট সিরিয়ালভাবে -k ট্যাগ সহ ফাইলগুলি গ্রহণ করে।

Listening machine: 
  nc -lp PORT -k > fileX
Clients: 
  nc IP PORT < file??

আমি যা চাই তা হ'ল একাধিক উত্স থেকে একাধিক ফাইলগুলি একে অপরের উপরে ওভাররাইট করে receive

পূর্ববর্তী আদেশগুলি দেখুন। সর্বদা ফাইলএক্সে আউটপুট লেখার সাথে শ্রোতার মেশিনটি এভাবে পূর্ববর্তী ক্লায়েন্টের ফাইলটি ওভাররাইট করে।

আমি একরকম প্রতিটি পৃথক ক্লায়েন্টের আউটপুট ফাইলের নাম পরিবর্তন করতে সক্ষম হতে চাই। ক্লায়েন্ট কি কোনওভাবে নেটক্যাটের উপর দিয়ে "ফাইল 10" স্ট্রিংটি পাঠাতে পারে এবং তাই শ্রোতাকে> ফাইল 10 এ আউটপুট দিতে বলতে পারে?

ধন্যবাদ.

সম্পাদনা: একটি ধারণা নিয়ে এসেছিল:

এটি স্ক্রিপ্টের মাধ্যমে অটোমেটেড:

  1. প্রথমত, শ্রোতা আউটপুট ফাইল file.txt এ সেট করে। (এনসি-পিএলটি পোর্ট> file.txt)

  2. ক্লায়েন্ট নেটকাটের মাধ্যমে স্ট্রিং (যেমন "ফাইল 123") প্রেরণ করে। (এটি সেই ফাইলের ফাইল নাম যা ভবিষ্যতে প্রেরণ করা হবে।)

  3. শ্রোতা file.txt লিখেছে, তারপরে file.txt পড়ে এবং আউটপুট ফাইল> file123 দিয়ে একটি নতুন নেটক্যাট শ্রোতার সূচনা করে

  4. অবশেষে, ক্লায়েন্ট ডেটা প্রেরণ করে।

উত্তর:


0

এই অন্যান্য উত্তরটিতে আপনার কাস্টম প্রোটোকল / সেটআপ থাকার বিষয়টি নিয়ে আলোচনা করা হয়েছে। আমি এটি পুনরাবৃত্তি করব না। আমি ধরে নিলাম আপনার নিজের সমাধানটি যা আপনি চান তা।

nc -k"একাধিক উত্স থেকে একাধিক ফাইলগুলি" পাওয়ার সেরা সরঞ্জাম নয় কারণ এটি বর্তমানের সমাপ্তির পরেই অন্য সংযোগের জন্য শুনবে। এর অর্থ এটি একাধিক ফাইল গ্রহণ করবে তবে একের পর এক সমান্তরালে নয়। আপনার "একাধিক উত্স" একে অপরকে অবরুদ্ধ করবে।

socatসঙ্গে reuseaddrএবং forkভাল হতে পারে।

ধারণার প্রমাণ হিসাবে আসুন আমাদের কাস্টম প্রোটোকল তৈরি করুন ( দ্রুত এবং নোংরা পথে)। একটি ফাইল এমন একটি স্ট্রিম হিসাবে স্থানান্তরিত হবে যা এতে অন্তর্ভুক্ত:

  1. ফাইলের নাম বা প্রাপ্তি পক্ষের ব্যবহারের পথ (নতুন লাইন ছাড়া);
  2. \nবিভাজক হিসাবে একক নতুন লাইন ( , এলএফ, 0x0a);
  3. বাইনারি তথ্য;
  4. ফাইলের শেষে।

এটি প্রাপ্তির আদেশ:

socat TCP-LISTEN:50011,reuseaddr,fork SYSTEM:'read -r f && cat >"$f"'

(সম্পাদনা) এটি সর্বজনীন প্রাপ্ত কমান্ড যা ফাইলনাম থেকে ট্রিলিং \r(যদি থাকে তবে) পুরোপুরি প্রোটোকল-সম্মতিযুক্ত উইন্ডোজ ক্লায়েন্টদের সাথে কাজ করার জন্য কার্যকর নয়:

socat TCP-LISTEN:50011,reuseaddr,fork SYSTEM:'read -r f && f="${f%$(printf "\r")}" && cat >"$f"'

(সম্পাদনা এখানে শেষ হয়)।

একটি ফাইল পাঠাতে:

(echo "The new name.foo" && cat "./the file to send.bar") > /dev/tcp/192.168.22.33/50011

নোট:

  • 50011 এটি একটি টিসিপি পোর্ট নম্বর, আপনি নিজের পছন্দটি চয়ন করতে পারেন;
  • 192.168.22.33 সার্ভারের ঠিকানা, এটি আপনার সেটআপের সাথে মেলানোর জন্য পরিবর্তন করুন;
  • আমি /dev/tcp/…/…সিনট্যাক্স ব্যবহার করেছি যা ব্যাশে কাজ করে, ncআপনি চান / প্রয়োজন হলে পাইপ করুন ;
  • ফাইলের নাম সংঘর্ষগুলি এখনও সমস্যা, catএগুলি সমাধান করার জন্য আপনার কিছু স্ক্রিপ্টেড যুক্তি (প্লেইনের পরিবর্তে ) প্রয়োজন;
  • SYSTEMএর সীমাবদ্ধতা রয়েছে (দেখুন man socat); এটিতে কোনও বৃহত স্ক্রিপ্ট বডিটি পরিবর্তনের পরিবর্তে কোনও স্ক্রিপ্ট স্ক্রিপ্ট লিখুন এবং ফাইলটি চালান; আপনি তদন্ত করতে পারেন EXEC;
  • আমাদের প্রোটোকল (দ্রুত এবং নোংরা হওয়া) কোনও ক্লায়েন্টকে ত্রুটিগুলি (যদি থাকে) বা সাফল্যের প্রতিবেদন করার কোনও সার্ভারের পক্ষে কোনও উপায় সরবরাহ করে না।

আমি এটি দেবিয়ান রিসিভার এবং উবুন্টু প্রেরকের সাথে পরীক্ষা করেছি। এক মুহুর্তে তিনটি পৃথক সংযোগ দুটি পৃথক আইপি ঠিকানা থেকে তিনটি পৃথক ফাইল স্থানান্তর করছিল। সমস্ত স্থানান্তর সম্পন্ন হওয়ার পরে, md5sumঅনুলিপিগুলি ( সম্ভবত সম্ভবত ) মূল হিসাবে একই কিনা তা যাচাই করতে ব্যবহৃত হত ; তারা ছিল.


খুশী হলাম। ক্লায়েন্ট উইন্ডোজ হলে কীভাবে ফাইলটি প্রেরণ করব? আমি পাওয়ারশেলে চেষ্টা করেছি .. এতো দূর আমি পেলাম। $ ফাইল = গেট-কনটেন্ট //somefile; প্রতিধ্বনি "ফাইলের নাম 10" $ ফাইল | ./ নেটকাট 32 আইপি পোর্ট লিনাক্স মেশিনে আমি "'ফাইলের নাম 10' $ '\ r'" (ডাবল উদ্ধৃতি ব্যতীত) নামে একটি ফাইল পাই। ফাইলের সামগ্রীগুলি সঠিক তবে ফাইলটির নাম বন্ধ রয়েছে।
মাইওয়েজ

@ মাইওয়েস আমি এই পাওয়ারশেল কোডটি আপনাকে সাহায্য করতে পারি না (আমি একটি লিনাক্স লোক, আমি পাওয়ারশেলের সাথে কখনও কাজ করি নি), তবে সমস্যাটি উইন্ডোজ এবং ইউনিক্সে বিভিন্ন লাইন শেষ হওয়ার কারণে হয়েছে বলে মনে হচ্ছে ।
কামিল ম্যাকিয়েরোস্কি

@ মাইওয়েস যদিও লিনাক্সের মধ্যে readএবং এর catমধ্যে সঠিক কোড এটি ঠিক করতে পারে। আমাকে কয়েক মিনিট দিন।
কামিল ম্যাকিয়েরোস্কি

@ মাইওয়েস আমার উত্তর এখন এটিকে সম্বোধন করে।
কামিল ম্যাকিয়েরোভস্কি

এটি ঠিক এখানে কিছু জাদুঘর।
মাইওয়েজ

0

না, সাধারণ নেটকেটের এ জাতীয় কোনও বিশেষ আদেশ নেই। এটি এর ইনপুটটি ব্যাখ্যা করে না, এবং সত্যই এটি এটিও জানে না যে এর ইনপুট / আউটপুটটি একটি ফাইল: পুনর্নির্দেশটি শেল আপনার দ্বারা সম্পন্ন হয় এবং নেটক্যাট খুঁজছেন বিরক্ত করে না।

সুতরাং আপনার একটি অতিরিক্ত প্রোগ্রামের দরকার যা প্রাপ্ত প্রাপ্ত ইনপুটটির ব্যাখ্যা করে এবং আউটপুট ফাইলগুলি তার নিজের থেকে খোলায়। শেষ পর্যন্ত, আপনি ব্যবহারিকভাবে পুনর্নবীকরণ হবে tar। (বা cpio, বা আরও এক ডজন অন্যান্য অনুরূপ ফর্ম্যাটগুলি))

[client] tar -cf - fileXYZ | nc <ip> <port>
[server] nc -lp <port> | tar -xvf -

উইন্ডোজের গনুহ এর তৈরী করে আছে আলকাতরা এবং Win10 সম্প্রতি সহ শুরু করেছে bsdtar । যদি উভয়ই উপলব্ধ না থাকে তবে আপনাকে নিজের নিজস্ব কিছু প্রোটোকল তৈরি করতে হবে - উদাহরণস্বরূপ, ফাইলের নামটি প্রথম লাইন হিসাবে প্রেরণ করুন, তারপরে ডেটা অনুসরণ করা হবে; আপনাকে প্রেরকের এবং প্রাপকের জন্য কাস্টম কোড লিখতে হবে ।

একক পাইপলাইন ইউনিট হিসাবে বন্ধনীগুলিতে একাধিক কমান্ডকে গোষ্ঠীভুক্ত করতে সহায়তা করবে:

[client] (echo fileXYZ && type fileXYZ) | nc <ip> <port>
[server] nc -lp <port> | (read name; name=${name##*/}; name=${name%$'\r'}; cat > "$name")

তবে পরিবর্তে, আমি লিনাক্স মেশিনে সাম্বা সেট আপ করব এবং একটি পাবলিক শেয়ার কনফিগার করব, যাতে ক্লায়েন্টরা সহজেই পারত copy fileXYZ \\<ip>\incoming\fileXYZ


"... আপনার নিজের কিছু প্রোটোকল তৈরি করুন" - ওপির ডাকটি মাইওয়েস। : ডি
কামিল ম্যাকিয়েরোস্কি

@ গ্রাভিটি উত্তরের জন্য ধন্যবাদ। আমি চেষ্টা করবো. আমি একটি ধারণা যুক্ত করার সাথে দয়া করে আমার উত্তরটি আবার পড়ুন এবং আপনার কি মনে হয় বলুন?
মাইওয়েজ

@ কামিলম্যাসিওরওস্কি হাহাহা, এর অর্থ কী?
মাইওয়েজ

@ মাইওয়েজ আপনি নিজের tarপথে পুনরায় উদ্ভাবন করতে পারেন ।
কামিল ম্যাকিয়েরোস্কি

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