जब कोई पोर्ट संदेश प्राप्त करता है, तो निष्पादित करने के लिए स्क्रिप्ट कैसे सेट करें


12

मैं सोच रहा हूं कि एक निश्चित पोर्ट (शायद netcat का उपयोग करके?) में सुनने के लिए शेल स्क्रिप्ट कैसे प्राप्त करें। उम्मीद है कि जब उस पोर्ट पर कोई संदेश भेजा जाता है, तो स्क्रिप्ट संदेश रिकॉर्ड करती है और फिर एक फ़ंक्शन चलाती है।

उदाहरण:

  1. कंप्यूटर 1 की पृष्ठभूमि में स्क्रिप्ट चल रही है, स्क्रिप्ट ने आने वाले ट्रैफ़िक के लिए पोर्ट 1234 खोला

  2. कंप्यूटर 2 कंप्यूटर 1 के 1234 को पोर्ट करने के लिए संदेश "हैलो वर्ल्ड" भेजता है

  3. कंप्यूटर 1 पर स्क्रिप्ट संदेश "हैलो वर्ल्ड" को एक चर $ संदेश के रूप में दर्ज करता है

  4. स्क्रिप्ट अब फ़ंक्शन चलाता है कि चर $ MESSAGE सेट किया गया है

मैं इसे दान करने के बारे में कैसे जाऊं?

जवाबों:


12

के साथ संभव होना चाहिए socat

स्टड के माध्यम से एक संदेश प्राप्त करने के लिए इस तरह की स्क्रिप्ट "getmsg.sh" लिखें:

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

फिर socatपोर्ट 7777 पर प्रत्येक tcp कनेक्शन के लिए हमारी स्क्रिप्ट को लागू करने के लिए इस कमांड को चलाएं :

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

दूसरे शेल से परीक्षण संदेश भेजें:

echo "message 1" | netcat localhost 7777

क्या आपने इसका परीक्षण किया है?

फिर से लिखा और परीक्षण किया;)
rudimeier

1
मैं आपके समाधान से प्रेरित था और एक ऐसा तरीका ढूंढा, जो netcat के साथ काम करता है: nc -l 7777 | ./getmsg.sh
डैनियल

जानकर ख़ुशी हुई की। लेकिन netcatएक कनेक्शन के बाद मौजूद है। socatयदि आप मेरी कमांड लाइन से "कांटा" हटाते हैं, तो आप भी ऐसा ही करेंगे।
रदिमीयेर

7

UCSPI-TCP तरीका

इसमें नेटसेट के अलावा अन्य टूलसेट भी हैं। यहाँ उनमें से कुछ का उपयोग करने का तरीका बताया गया है। वे सभी एक serviceस्क्रिप्ट के अस्तित्व को मानते हैं funcजो आपकी चलती है , जो कुछ भी हो सकता है:

#! / Bin / श
पढ़ने के दौरान -r संदेश
करना
    इको 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}"
    समारोह
किया हुआ

TCPREMOTEIPऔर TCPREMOTEPORTवातावरण चर UCSPI-टीसीपी प्रोटोकॉल द्वारा परिभाषित कर रहे हैं।

स्क्रिप्ट विभिन्न टूलसेट का उपयोग करते हुए टीसीपी कनेक्शन के अनुसार एक व्यक्तिगत प्रक्रिया के रूप में शुरू की गई है। निम्न में से, उपकरण एक छोटी लिपि के भीतर उपयोग किए जाते हैं। इस तरह की स्क्रिप्ट, पारंपरिक रूप से नामित है run, यह है कि कोई उन्हें एक डेमोंटोल्स-परिवार सेवा प्रबंधक के तहत कैसे चलाएगा। वे निश्चित रूप से सीधे लागू किए जा सकते हैं।

बर्नस्टीन ucspi-tcp

साथ डैनियल जे बर्नस्टेन की ucspi-टीसीपी, tcpserverspawns serviceस्क्रिप्ट:

#! / बिन / श-ई
निष्पादित tcpserver -v -P -R -H -l 0 0.0.0.0 7777/service

बर्नस्टीन ucspi-tcp के IPv6- सक्षम वर्धित संस्करण हैं। इरविन हॉफमैन के साथ, tcpserverIPv4 और IPv6 दोनों को एक में संभालने का प्रयास करता है (यदि ऑपरेटिंग सिस्टम इसका समर्थन करता है, तो कुछ नहीं करता है) और serviceस्क्रिप्ट को स्‍पॉन्‍स करता है :

#! / बिन / श-ई
निष्पादित tcpserver -v -P -R -H -l 0 :: 0 7777 ./ सेवा

बरकोट एस 6-नेटवर्किंग, एस 6, और निष्पादित करें

लॉरेंट बर्कोट के s6- नेटवर्किंग के साथ, s6-tcpserver4और s6-tcpserver6IPv4 और IPv6 को अलग से संभालें, और serviceस्क्रिप्ट को देखें:

#! / आदेश / execlineb
s6-tcpserver4 -v 0.0.0.0 7777 
।/सर्विस
#! / आदेश / execlineb
s6-tcpserver6 -v :: 0 7777 
।/सर्विस

पहले s6-tcpserver-accessऔर जैसे s6-applyuidgidश्रृंखला में उपकरणों को इंटरपोज़ करके कोई अधिक जटिल सर्वर का निर्माण कर सकता है ./service

नोश UCSPI उपकरण

नोश टूलसेट के साथ, tcp-socket-listenटीसीपी सॉकेट पर सुनता है, फिर से IPv4 और IPv6 को संभालता है यदि ऑपरेटिंग सिस्टम ऐसा करने का समर्थन करता है, और चेन tcp-socket-acceptजिसके बदले में serviceस्क्रिप्ट लिखती है :

#! / Bin / nosh
tcp-socket-सुनिए --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
।/सर्विस

या एक OpenBSD जैसे ऑपरेटिंग सिस्टम पर दो अलग-अलग प्रक्रियाएं चलाता है:

#! / Bin / nosh
tcp-socket-सुनिए 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
।/सर्विस
#! / Bin / nosh
tcp-socket-सुनिए :: 7777
tcp-socket-accept --verbose --localname ::
।/सर्विस

एक और अधिक जटिल सर्वर का निर्माण कर सकते हैं जैसे कि उपकरण को ucspi-socket-rules-checkऔर setuidgidश्रृंखला में गूंथ कर।

#! / Bin / nosh
tcp-socket-सुनिए --combine4and6 :: 7777
setuidgid unprivileged-user
tcp-socket-accept --verbose --localname 0
ucspi-socket-rules-check -verbose
।/सर्विस

पप ipsvd

Gerrit पेप के ipsvd के साथ, tcpsvdspawns serviceस्क्रिप्ट:

#! / बिन / श-ई
निष्पादित tcpsvd -v 0.0.0.0 7777 ./ सेवा

UCSPI-यूडीपी

सामान्य serviceस्क्रिप्ट तब संभाल सकती है जब मानक इनपुट एक धारा सॉकेट है। लेकिन आपने टीसीपी को स्पष्ट रूप से निर्दिष्ट नहीं किया है।

यद्यपि उपरोक्त कुछ टूलकिट का उपयोग यूडीपी सर्वरों को उसी तरह से बनाने के लिए किया जा सकता है जैसे कि टीसीपी सर्वर (एनओएस udp-socket-listenमें सीएफ ) के निर्माण के लिए उनका उपयोग कैसे किया जा सकता है , यह शेल स्क्रिप्ट के साथ वास्तविक सेवा कार्यक्रम बनाने के लिए मुश्किल है, क्योंकि शेल के बिल्डिंस नहीं करते हैं। जरूरी है कि मानक इनपुट एक डेटाग्राम सॉकेट होने पर अच्छी तरह से सामना करें ।

आगे की पढाई

  • मसविदा बनाना:
  • उपकरण सेट:
    • डैनियल जे। बर्नस्टीन। ucspi-tcp । cr.yp.to.
    • s6- नेटवर्किंग । लॉरेंट बरकोट। skarnet.org।
    • s6 । लॉरेंट बरकोट। skarnet.org।
    • जोनाथन डी बॉयने पोलार्ड (2016)। नोश सॉफ्टवेयर्स।
    • ipsvd । जेरिट पपी। smarden.org।
  • संदर्भ मैनुअल:
    • डैनियल जे। बर्नस्टीन। कार्यक्रम । ucspi-टीसीपी।tcpserver
    • इरविन हॉफमैन। tcpserverucspi-tcp6 । fehcom.de।
    • s6-tcpserver4। लॉरेंट बरकोट। s6- नेटवर्किंग । skarnet.org।
    • s6-tcpserver6। लॉरेंट बरकोट। s6- नेटवर्किंग । skarnet.org।
    • s6-tcpserver-access। लॉरेंट बरकोट। s6- नेटवर्किंग । skarnet.org।
    • s6-applyuidgid। लॉरेंट बरकोट। s6 । skarnet.org।
    • जोनाथन डी बॉयने पोलार्ड (2016)। tcpservernosh गाइड । सॉफ्टवेयर्स।
    • जोनाथन डी बॉयने पोलार्ड (2016)। tcp-socket-listennosh गाइड । सॉफ्टवेयर्स।
    • जोनाथन डी बॉयने पोलार्ड (2016)। tcp-socket-acceptnosh गाइड । सॉफ्टवेयर्स।
    • जोनाथन डी बॉयने पोलार्ड (2016)। ucspi-socket-rules-checknosh गाइड । सॉफ्टवेयर्स।
    • जोनाथन डी बॉयने पोलार्ड (2016)। setuidgidnosh गाइड । सॉफ्टवेयर्स।
    • जोनाथन डी बॉयने पोलार्ड (2016)। udp-socket-listennosh गाइड । सॉफ्टवेयर्स।
    • tcpsvdipsvd । जेरिट पपी। smarden.org।

0

यह भी किया जा सकता है udpsvdजिसके साथ उबंटू / डेबियन ( देखें मैनपेज ) के साथ-साथ बिल्ट-इन व्यस्त बॉक्स में उपलब्ध है। उदाहरण:

# 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.