কোনও পোর্ট কোনও বার্তা পেলে কীভাবে কার্যকর করতে স্ক্রিপ্ট সেট করবেন


12

আমি ভাবছি যে কোনও নির্দিষ্ট বন্দরে শোনার স্ক্রিপ্ট কীভাবে পাবেন (সম্ভবত নেটক্যাট ব্যবহার করছেন?)। আশা করি যাতে সেই বন্দরে যখন কোনও বার্তা পাঠানো হয়, স্ক্রিপ্টটি বার্তাটি রেকর্ড করে এবং তারপরে একটি ফাংশন চালায়।

উদাহরণ:

  1. কম্পিউটার 1 এর স্ক্রিপ্টটি ব্যাকগ্রাউন্ডে চলছে, স্ক্রিপ্টটি আগত ট্র্যাফিকের জন্য 1234 পোর্টটি খোলা হয়েছে

  2. কম্পিউটার 2 কম্পিউটার 1 এর 1234 পোর্টে "হ্যালো ওয়ার্ল্ড" বার্তা পাঠায়

  3. কম্পিউটারে স্ক্রিপ্ট 1 ভেরিয়েবল $ ম্যাসেজের কাছে "হ্যালো ওয়ার্ল্ড" বার্তাটি রেকর্ড করে

  4. স্ক্রিপ্টটি এখন চলমান vari MESSAGE সেট করা হয়েছে function

আমি এই অনুদান সম্পর্কে কীভাবে যেতে পারি?

উত্তর:


12

সঙ্গে সম্ভব হওয়া উচিত socat

স্টিডিনের মাধ্যমে একটি বার্তা পাওয়ার জন্য এই জাতীয় স্ক্রিপ্ট "getmsg.sh" লিখুন:

#!/bin/bash
read MESSAGE
echo "PID: $$"
echo "$MESSAGE"

তারপরে socat7777 পোর্টে প্রতিটি টিসিপি সংযোগের জন্য আমাদের স্ক্রিপ্টটি চাওয়ার জন্য এই আদেশটি চালান :

socat -u tcp-l:7777,fork system:./getmsg.sh

অন্য শেল থেকে একটি পরীক্ষার বার্তা প্রেরণ করুন:

echo "message 1" | netcat localhost 7777

আপনি এটি পরীক্ষা করেছেন?


1
আমি আপনার সমাধানটি দ্বারা অনুপ্রাণিত হয়ে নেটকাট নিয়ে কাজ করার একটি উপায় খুঁজে পেয়েছি: এনসি-এল 7777 | ./getmsg.sh
ড্যানিয়েল

এটা শুনে আনন্দিত হলাম. তবে netcatএকটি সংযোগের পরে বিদ্যমান। socatআপনি যদি আমার কমান্ড লাইন থেকে ", কাঁটাচামচ" অপসারণ করেন তবে একই কাজ করবেন।
rudimeier

7

ইউসিএসপিআই-টিসিপি উপায়

নেটক্যাট ব্যতীত অন্যান্য সরঞ্জামদণ্ড রয়েছে। তাদের কয়েকটি ব্যবহার করার পদ্ধতি এখানে রয়েছে। তারা সকলেই serviceএমন কোনও স্ক্রিপ্টের অস্তিত্ব অনুমান করে funcযা আপনার চালায় , যা কিছু হোক না কেন:

#! / বিন / SH
পড়ার সময় - বার্তা
করা
    প্রতিধ্বনি 1> & 2 "$ {TCPREMOTEIP IP" "$ {TCPREMOTEPORT r" আরএক্স "{ESS বার্তা}"
    func
সম্পন্ন

TCPREMOTEIPএবং TCPREMOTEPORTবিভিন্ন পরিবেশের UCSPI-বিভিন্ন TCP প্রোটোকল দ্বারা সংজ্ঞায়িত করা হয়।

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

বার্নস্টেইন ucspi-tcp

ড্যানিয়েল জে বার্নস্টেইনের ucspi-tcp tcpserverএর সাথে serviceস্ক্রিপ্টটি তৈরি করেছে:

#! / বিন / শি -e
exec tcpserver -v -P -R -H -l 0 0.0.0.0 7777। / পরিষেবা

বার্নস্টেইন ucspi-tcp এর IPv6- সক্ষম বর্ধিত সংস্করণ রয়েছে। এরউইন হফম্যানের সাহায্যে, tcpserverআইপিভি 4 এবং আইপিভি 6 উভয়কে হ্যান্ডেল করার চেষ্টা করে (যদি অপারেটিং সিস্টেম এটি সমর্থন করে তবে কয়েকজন তা করেন না) এবং serviceস্ক্রিপ্টটি উত্সাহিত করে :

#! / বিন / শি -e
exec tcpserver -v -P -R -H -l 0 :: 0 7777। / পরিষেবা

বেরকোট এস 6-নেটওয়ার্কিং, এস 6 এবং এক্সেলাইন

লরেন্ট Bercot এর S6-নেটওয়ার্কিং সঙ্গে, s6-tcpserver4এবং s6-tcpserver6IPv4 ও IPv6 আলাদাভাবে পরিচালনা করি এবং ডিম serviceস্ক্রিপ্ট:

#! / কমান্ড / execlineb
s6-tcpserver4 -v 0.0.0.0 7777 
./service
#! / কমান্ড / execlineb
s6-tcpserver6 -v :: 0 7777 
./service

এক যেমন টুলস interposing দ্বারা আরো জটিল সার্ভারের বিল্ড আপ করতে পারেন s6-tcpserver-accessএবং s6-applyuidgidচেন অব্যবহিত পূর্বে ./service

NOS ইউসিএসপিআই সরঞ্জামসমূহ

নস টুলসেটের সাহায্যে, tcp-socket-listenটিসিপি সকেটে শুনেছে, আবার আইপিভি 4 এবং আইপিভি 6 একযোগে পরিচালনা করছেন যদি অপারেটিং সিস্টেমটি এমনটি সমর্থন করে এবং চেইনগুলি স্ক্রিপ্টটি tcp-socket-acceptপ্রবর্তন করে service:

#! / বিন / জখলাবার
tcp-सॉকেট-শুনুন --combine4and6 :: 7777
tcp-सॉকেট-গ্রহণ --verbose --localname 0
./service

অথবা ওপেনবিএসডি এর মতো অপারেটিং সিস্টেমে দুটি পৃথক প্রক্রিয়া চালায়:

#! / বিন / জখলাবার
tcp- সকেট-শুনুন 0.0.0.0 7777
tcp-सॉকেট-গ্রহণ --verbose --localname 0
./service
#! / বিন / জখলাবার
tcp-सॉকেট-শুনুন :: 7777
tcp-सॉকেট-গ্রহণ --verbose - স্থানীয় নাম ::
./service

চ্যানেলের মতো ucspi-socket-rules-checkএবং সরঞ্জামগুলিতে ইন্টারপোসিং করে কেউ আরও জটিল সার্ভার তৈরি করতে পারে setuidgid

#! / বিন / জখলাবার
tcp-सॉকেট-শুনুন --combine4and6 :: 7777
setuidgid অপ্রয়োজনীয়-ব্যবহারকারী
tcp-सॉকেট-গ্রহণ --verbose --localname 0
ucspi- সকেট-বিধি-পরীক্ষা --verbose
./service

পেপ ipsvd

জেরিট প্যাপের আইপসভিডির tcpsvdসাথে serviceস্ক্রিপ্টটি তৈরি করা হয়েছে:

#! / বিন / শি -e
exec tcpsvd -v 0.0.0.0 7777 ./service

UCSPI-এর ফলে UDP

সাধারণ serviceস্ক্রিপ্ট হ্যান্ডেল করতে পারে যখন স্ট্যান্ডার্ড ইনপুট একটি স্ট্রিম সকেট হয়। তবে আপনি স্পষ্টভাবে টিসিপি নির্দিষ্ট করেন নি।

যদিও উল্লিখিত কিছু টুলকিটগুলি ইউডিপি সার্ভারগুলি একই পদ্ধতিতে টিসিপি সার্ভারগুলি তৈরি করতে ব্যবহার করতে পারে (নফ udp-socket-listenইন সিএফ ), শেল স্ক্রিপ্ট সহ প্রকৃত পরিষেবা প্রোগ্রামটি তৈরি করা মুশকিল, কারণ শেলটির বিল্টিনগুলি না স্ট্যান্ডার্ড ইনপুটটি যখন একটি ডেটাগ্রামের সকেট হয় তখন অগত্যা ভালভাবে মোকাবেলা করা উচিত ।

আরও পড়া


0

এটি udpsvdউবুন্টু / ডেবিয়ান ( ম্যানপেজ দেখুন ) পাশাপাশি বিল্ট ইন ইন ব্যস্তবক্সেও করা যায় with উদাহরণ:

# simple UDP "echo" on port 9998
udpsvd 0.0.0.0 9998 cat

catকার্যকর করার জন্য আপনার শেল স্ক্রিপ্ট দিয়ে প্রতিস্থাপন করুন , স্টিডিন হ'ল প্যাকেট।

এর মাধ্যমে netcat, আপনি শুনতে রাখতে একটি লুপে চালাতে পারেন এবং প্রতিটি প্যাকেট এতে পাস করতে পারেন myscript:

 while true; do nc -ul 9998 | myscript.sh; done

আপনি যদি সমস্ত প্রাপ্ত প্যাকেটগুলি আপনার স্ক্রিপ্টের একক অনুরোধে একটি স্ট্রিম হিসাবে পাস করতে চান:

# this will keep listening instead of terminating the process:
nc -kul 9998 |myscript.sh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.