পাইপিং কমান্ডগুলি এন.সি.


3

আমি আপাতদৃষ্টিতে অনেকগুলি অনুরূপ প্রশ্নগুলি অনুসন্ধান করেছি তবে কখনও কাজের মতো কিছু পাইনি। আমি ওয়াইফাই ওবিডিআইআই সেন্সরটির সাথে যোগাযোগের জন্য রাস্পবেরি পাই (২ য় জেন) ব্যবহার করার চেষ্টা করছি। আমি নিম্নলিখিত কমান্ড ব্যবহার করতে সক্ষম

nc -C 192.168.0.10 35000

192.168.0.10 হ'ল গাড়ী সেন্সর এবং 35000 বন্দর। সংযোগটি ঠিকঠাক বলে মনে হচ্ছে এমনটি প্রাসঙ্গিক নয়। যাইহোক, আমি একটি এনসি উদাহরণ খুলতে পারি এবং তারপরে টাইপ করতে পারি, উদাহরণস্বরূপ "0145" (একটি সেন্সর কোড), এবং এর বিনিময়ে আমি এনসি সেশনের আউটপুটটিতে ফিরে সেন্সরের একটি মান পাই (যেমন আমার ইঞ্জিনের আরপিএম) )। এটা ঠিক কাজ করে। আমি যা করতে চাই তা হ'ল পরিকল্পনার উদ্দেশ্যে এনসি সেশনে একটি পাঠ্য ফাইল থেকে পাইপ কমান্ড। সুতরাং আমার আদর্শ ফলাফলটি RPM মানগুলির একটি ধ্রুব স্ট্রিম হবে এবং এর সাথে সম্পর্কিত সময়গুলি একটি পাঠ্য ফাইলে ফেলে দেওয়া হবে। আমি সেখান থেকে কাজ করতে পারি। তবে আমি কীভাবে এটি করব ঠিক জানি না। আমি একটি কমান্ডস.টিএসটি সেট আপ করেছি যা "0145" এর কয়েক হাজার লাইন এবং আমি সেই ফাইলটি পড়তে চাইছি এবং এটি লাইনটি এনসি-তে লাইন দিয়ে যেতে চাই (আমি সম্ভবত ঘুমের সাথে নমুনার ব্যবধানটি নিয়ন্ত্রণ করতে পারি), এবং তারপরে আউটপুটটি পড়ুন এবং সেগুলি একটি পাঠ্য ফাইলে স্ট্যাশ করুন। আমি জানি যে এই সমস্যাটির স্টিডিন এবং স্টডআউট এবং পাইপিংয়ের সাথে কিছু সম্পর্ক রয়েছে তবে যে কারণেই হোক না কেন, আমি এটি যথেষ্টভাবে পেতে পারি নি। আমি সেগুলির কোনওটিতেই মাস্টার নই। আমি পুরো প্রক্রিয়াটি স্ক্রিপ্ট করতে চাই।

এই মুহুর্তে, আমি যদি চালানো

cat <(echo 0145) - | nc -C 192.168.0.10 35000

এটি আমাকে যে টার্মিনালটিতে আউটপুট দেয় তা দেয় তবে কেবলমাত্র একটি একক মানের জন্য কাজ করে। তবে আমি এটিকে একটি লুপের মধ্যে রাখার চেষ্টা করার সাথে সাথে, যেখানে আমি 0145 টি the স্ক্রিপ্টের মধ্যে $ কমান্ডগুলিতে তৈরি করি এবং একটি টিএসটি ফাইল থেকে কমান্ড লাইন পাই, এটি কাজ করা বন্ধ করে দেয়। আসলে, এটি কোনও লুপের ভিতরে বা ব্লক করা বন্ধ করে দেয় এমনকি যদি আমি এটিকে 0145 হিসাবে ছেড়ে দিই এবং কোনও ভেরিয়েবল ব্যবহার না করি।

সুতরাং, দীর্ঘ গল্প সংক্ষিপ্ত, আমি স্ক্রিপ্টটি এনসি সংযোগে লাইন টেক্সট ফাইল লাইন প্রেরণ করতে চাই এবং তারপরে আমি প্রতিটি প্রতিক্রিয়া অন্য একটি ফাইলে বের করতে চাই। যদি এটি লিখিত ছিল না, আমি সেই এনসি সংযোগটি খুলতে এবং প্রতি 1 সেকেন্ডে 0145 পাঠাতে এবং সেই প্রতিক্রিয়াগুলি পেতে (এখনও কোনও ফাইলে কীভাবে তাদের পাস করতে হয় তা জানিনা) তবে খুব কার্যকরভাবে কার্যকর ts আমি মনে করি এটি করার একটি সহজ উপায় হওয়া উচিত। আমি কিছুটা নুব কিন্তু ফিগার আইডি এটি এখানে শট দেয়। কোন সাহায্য ব্যাপকভাবে প্রশংসা করা হয়

উত্তর:


4

এটি করার অনেক উপায় আছে।

নেটকাট সহ

নেটকাটের সমস্যাটি হ'ল এটি ফাইলটির শেষের দিকে শনাক্ত করার সাথে সাথে সংযোগটি বন্ধ করে দেয়। নেটকাটের জিএনইউ বাস্তবায়নে শ্রোতা দৃষ্টান্তটি অনির্দিষ্টকালের জন্য উন্মুক্ত রাখতে বেশ কয়েকটি বিকল্প ( -কে বা- ডাব্লু -1 ) থাকে, তবে দু'টিই কার্যকর হয় না। কি কাজ করে Nmap এর-এর সংস্করণ netcat বলা ncat

আপনার পিসিতে, এনএম্যাপ প্যাকেজ ইনস্টল করুন , তারপরে ইস্যু করুন:

mkfifo return_pipe
ncat -k -l 12345 0<return_pipe| ncat -C 192.168.0.10 35000 1>return_pipe &

এখন আপনি নিজের পছন্দ মতো সমস্ত কিছু বিভিন্ন ব্যাঙ্কে স্থানান্তর করতে পারেন

echo Ciao | ncat localhost 12345
cat somefile.txt | ncat localhost 12345 

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

mkfifo mypipe
tail -f mypipe | ncat localhost 12345 &
echo Ciao > mypipe
cat somefile.txt > mypipe

ফিরতি মেসেজে আপনি ডিভাইস থেকে এখন নামে নল হয় return_pipe । আদেশ

tail -f return_pipe >> responses

একটি ফাইল নামে যন্ত্রাংশের প্রতিক্রিয়ার appends প্রতিক্রিয়া

নেটকাট ছাড়াই

এটি ইপুর সিরার দ্বারা চিহ্নিত করা হয়েছে (আমার কাছ থেকে চমৎকার !,1)। তবে আমি এটি কিছুটা ভিন্নভাবে করতাম,

exec 3>/dev/tcp/192.168.0.10/35000
exec 4</dev/tcp/192.168.0.10/35000
exec 4>>somefile.out
echo "Ciao" >&3 
cat somefile.txt >&3

আপনি যদি আপনার আদেশগুলিও লক্ষ্য রাখতে চান,

echo Ciao | tee  -a file_with_my_commands 1>&3
cat somefile.txt | tee -a file_with_my_commands 1>&3

এবং, যখন আপনি এই যোগাযোগের কাজ শেষ করেন,

exec 3>&-
exec 4>&-

3

আপনি কেন ব্যবহার করবেন netcat? Bashবিল্টিন ওরফে টিসিপি সকেটগুলি পরিচালনা করতে পারে।

n=0
while read -r line;do
 ((n++))
 exec 3<>/dev/tcp/192.168.0.10/35000
 echo -e "$line" >&3
 cat <&3 > response.$n
 exec 3<&-
 exec 3>&-
done < data.txt

আমি এটি একটি শট দিয়েছি, তবে আমার যা প্রয়োজন তা আমি করতে পারিনি। কেবল সঠিকভাবে বুঝতে: $ লাইনটি ডাটা.টেক্সট থেকে প্রদত্ত একটি লাইন হবে?
মার্কসেম

হ্যাঁ. প্রতিটি লাইন টিসিপি সকেটে পাইপ করা হবে এবং প্রতিটি প্রতিক্রিয়া ফাইল রিসোনতে সংরক্ষণ করা হবে <<লাইনম্বার>
ইপোর সিরসর

ওহ চেপে ধরুন, আমি / দেব / টিসিপি রাখব না
মার্কসেম

কারণ এটি বাশের একটি বিল্টিন ওরফে।
ইপোর সিরসর

এটি কোনও কারণেই আমার হওয়া দরকার যেখানে এটি ঠিক নয় তবে এটি সঠিক দিকের একটি বিশাল পদক্ষেপ। আমি আমার ডেটা.টিএসটি ফাইলটি সরলতার জন্য মাত্র 5 লাইনে কেটে ফেলেছি (এবং তাই 1000 টি প্রতিক্রিয়া ফাইল পাব না) তবে এখন পর্যন্ত আমি কেবল একটি একক প্রতিক্রিয়া 1 ফাইল তৈরি করতে সক্ষম হয়েছি (এটি মনে হয় না) লুপিং হতে)
মার্কসেম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.