2011-01-19 11 views
6

स्वीकार करता है मैं समझता हूं कि टेलनेट HTTP जितना प्रोटोकॉल है। मेरे पास यह धारणा है कि शुरुआती टीसीपी कनेक्शन के बाद टेलनेट क्लाइंट इस मामले में दूसरी तरफ सर्वर पर कुछ टेलनेट विशिष्ट कोड भेज देगा। लेकिन चूंकि HTTP सर्वर टेलनेट विशिष्ट कोड को नहीं समझता है, इसलिए इसे किसी त्रुटि को फेंकना चाहिए या कनेक्शन आदि को छोड़ना चाहिए। लेकिन असल में हम HTTP सर्वर पर टेलनेट कर सकते हैं और यदि हम सही HTTP शीर्षलेख टाइप करते हैं और उन्हें भेजते हैं तो पृष्ठों को ला सकते हैं। यह कैसा हो सकता है? विकिपीडिया प्रविष्टि ने वास्तव में मुझे इस विशिष्ट बिंदु को समझने में मदद नहीं की। (http://en.wikipedia.org/wiki/Telnet#Telnet_data)कैसे HTTP सर्वर टेलनेट

उत्तर

4

आप यह कहकर सही कह रहे हैं कि टेलनेट इसका अपना प्रोटोकॉल है, जिसे आरएफसी के कुछ में वर्णित किया गया है। आप प्रोटोकॉल की व्याख्या करने वाले बिल्कुल और कुछ अन्य संसाधनों को देखने के लिए wikipedia पर एक नज़र डाल सकते हैं।

मूल रूप से यह इस तरह काम करता है: जब आप किसी सर्वर से कनेक्ट करने के लिए टेलनेट का उपयोग करते हैं, तो यह सर्वर आपको भेजे जाने वाले हर प्रिंट करने योग्य चरित्र को दिखाएगा। और जो भी आप टाइप करते हैं उसे वापस सर्वर पर भेजा जाएगा। वेब सर्वर से कनेक्ट करते समय आप वेब पृष्ठों को पुनर्प्राप्त कर सकते हैं: आप एक आदेश भेजते हैं जो एक http सर्वर स्वीकार करता है और सही परिणाम प्राप्त करता है।

अब, कुछ टेलनेट विनिर्देश विकल्प हैं। आईआईआरसी, आप सर्वर को तब तक नहीं भेजेंगे जब तक कि सर्वर उन्हें पहले भेजता न हो। उन विकल्पों का उपयोग स्थानीय गूंज को सक्षम/अक्षम करने के लिए किया जाता है (पासवर्ड के बारे में सोचें, आप लॉग इन करते समय दिखाई नहीं देना चाहते हैं), टर्मिनल आकार पर बातचीत करें, लाइन प्रकार के अंतराल पर बातचीत करें। वे आदेश हैं जो कुछ बाइट लंबे हैं और बाइट 255 (आईएसी कहा जाता है, कमांड के रूप में व्याख्या) के साथ शुरू करते हैं। जब आप किसी टेलनेट सर्वर से कनेक्ट होते हैं, तो आपका क्लाइंट उनको व्याख्या करेगा और तदनुसार जवाब देगा, पृष्ठभूमि में स्वचालित रूप से, आपको उन आदेशों को दिखाए बिना।

हालांकि टेलनेट के लिए विशिष्ट नहीं है, एक टेलनेट सर्वर ANSI escape sequences भी भेज सकता है। उन रंगों, बोल्ड, कर्सर पोजिशनिंग के लिए उपयोग किया जाता है ... एक टेलनेट क्लाइंट उनको भी व्याख्या करेगा (या उन्हें टर्मिनल एमुलेटर पर भेज दें, जैसे आप xterm)।

आप कुछ "निचले स्तर" टेलनेट से है, जो टेलनेट विकल्पों की व्याख्या नहीं है और वास्तव में आप क्या मिलेगा प्रदर्शित चाहते हैं, आप netcat

0

आप टेलनेट का उपयोग कर एक http सर्वर से पूछ सकते हैं, मैं अक्सर एक त्वरित और ग़लत परीक्षण के रूप में करता हूं टेलनेट कोई कोड नहीं भेजता है। यह सिर्फ कनेक्शन बनाता है, लेकिन वहाँ टेलनेट विशिष्ट कोड आप भेज सकते हैं अगर आप

ऐसा करने की आवश्यकता है ...

telnet server.com 80 
GET http/1.0 /^m 
host: server.com^m 
^m 

... servers response 

^m = दर्ज कुंजी

मैं इस में किया जाता है किया है खिड़कियों में लिनक्स यह अलग हो सकता है।

डीसी

+0

ठीक है पर एक नज़र लेने के लिए अगर मैं सही ढंग से टेलनेट क्लाइंट को समझने के लिए कर सकते हैं बस सॉकेट कनेक्शन बनाता है और कुछ टेलनेट विशिष्ट सामान भेजने के लिए सर्वर के लिए प्रतीक्षा करें। यदि सर्वर कुछ चीज़ भेजता है तो यह एनवीटी सामानों पर बातचीत करने के लिए विशिष्ट कोड के साथ प्रतिक्रिया करेगा। अगर यह सर्वर तक रिले करने के लिए कुछ चीज़ों को तब तक तब तक लटकाएगा जब तक कि यह सर्वर को रिले करने के लिए कुछ चीज़ों को टाइप न करे। – chamibuddhika

+0

जैसा कि मैं समझता हूं यह इस बात पर निर्भर करता है कि आप टेलनेट कैसे शुरू करते हैं। यदि आप इसे होस्ट और वैकल्पिक बंदरगाह से शुरू करते हैं जैसे मैंने उपरोक्त किया है, तो यह सीधे मेजबान से जुड़ता है और कमांड के लिए इंतजार करता है (जो आप टाइप करते हैं) यदि आप मेजबान के बिना इसे शुरू करते हैं तो यह कमांड मोड में जाता है। यहां एक नज़र डालें http://linux.about.com/od/commands/l/blcmdl1_telnet.htm और यहां विंडोज़ के लिए http://technet.microsoft.com/en-us/library/c.aspx मैं सक्षम हूं विंडोज़ पर काम करने के लिए उपर्युक्त उदाहरण प्राप्त करने के लिए, इसलिए मैं कोशिश करूंगा और पता नहीं क्यों नहीं। – DeveloperChris

+0

linux.about.com/od/commands/l/blcmdl1_telnet.htm मेरी समस्या हल हो गई। यह इस बात पर निर्भर है कि आपने टेलनेट क्लाइंट को कैसे शुरू किया है जैसा कि आपने घटना का उल्लेख किया है, मैंने पाया कि लिनक्स क्लाइंट उस विशेष स्विच को नहीं मिला है। – chamibuddhika

3

टेलनेट सिर्फ एक सुन सॉकेट करने के लिए एक TCP कनेक्शन को खोलने के लिए एक आसान इंटरैक्टिव तरीका है। चूंकि टेलनेट क्लाइंट उस सॉकेट को जो भी टाइप करता है उसे अंधाधुंध भेजता है, यह सैद्धांतिक रूप से टीसीपी के शीर्ष पर किसी भी अन्य प्रोटोकॉल का अनुकरण कर सकता है। दरअसल तथ्य यह है कि कुंजीपटल चालक द्वारा गैर प्रिंट करने योग्य वर्णों का अर्थ केवल एकमात्र सीमा है।

HTTP HTTP शीर्षलेख और शरीर के बीच लगातार दो "लाइन ब्रेक" (यानी "रिक्त रेखा") के साथ सीमित करने के अलावा गैर प्रिंट करने योग्य वर्णों का उपयोग नहीं करता है।
कृपया ध्यान दें कि मैं यहां HTML बॉडी टैग के बारे में बात नहीं कर रहा हूं, लेकिन पेलोड (जैसे SOAP बॉडी)।

मूल रूप से यहां कोई जादू नहीं है।

चलिए चीजों की गतिशीलता देखते हैं।
HTTP GET, POST, PUT आदि जैसे कई आदेशों का समर्थन करता है ... प्रत्येक कमांड का सिंटैक्स होता है और सिंटैक्स और अच्छी तरह से परिभाषित त्रुटि कोड पर सहमति के साथ एक संबंधित प्रतिक्रिया होती है। जब आप टेलनेट का उपयोग कर किसी HTTP सर्वर से कनेक्ट होते हैं, तो आप सॉकेट कनेक्शन खोलते हैं और सर्वर आपके क्लाइंट के साथ संवाद प्रबंधित करने के लिए थ्रेड फोर्क करता है। फिर ब्राउज़र को भेजे जाने वाले आदेश को टाइप करके आप ब्राउज़र को नकल कर सकते हैं। प्रत्येक बार जब आप सीआर कुंजी पर हमला करते हैं, तो क्लाइंट सर्वर को लाइन सबमिट करता है। यदि किसी कमांड में कई पंक्तियां होती हैं, तो आप कमांड हेडर की एक पंक्ति से संबंधित कई पंक्तियां दर्ज कर सकते हैं। एक बार जब आप एक पंक्ति में दो सीआर (यानी एक खाली रेखा) पर हमला करते हैं, तो कमांड हेडर सर्वर द्वारा पूरा समझा जाता है और प्रतिक्रिया एक साथ रखी जाती है और आपके क्लाइंट को वापस भेज दी जाती है। चूंकि एक टेलनेट क्लाइंट का जीवन लक्ष्य प्राप्त वर्णों को प्रतिबिंबित करना है (जब तक अन्यथा नहीं बताया जाता है), तो आप अपनी टर्मिनल विंडो पर प्रतिक्रिया शीर्षलेख और शरीर देख सकते हैं। टेलनेट वहां रुक जाता है। एक ब्राउज़र एचटीएमएल प्रस्तुत करेगा (अगर प्रतिक्रिया एक HTML पृष्ठ है)।
मुझे उम्मीद है कि यह सब स्पष्ट करता है।