2011-01-20 15 views
21

पर एक HTTP GET अनुरोध कैसे बना सकता हूं, मैं नेटवर्क प्रोग्रामिंग में बस एक मध्यम प्रोग्रामर हूं।पायथन-स्कैपी या जैसे- मैं पैकेट स्तर

सामान्य रूप से नेटवर्क की मेरी समझ में सुधार करने के प्रयास के रूप में, मैं पैकेट स्तर से कई बुनियादी HTTP क्रियाएं करने की कोशिश कर रहा हूं। मेरा सवाल यह है: मैं पैकेट स्तर पर HTTP GET अनुरोध और assosciated आइटम बनाने के लिए SCAPY जैसी लाइब्रेरी का उपयोग कैसे कर सकता हूं? मुझे एहसास है कि यह अजीब लग सकता है, लेकिन मुझे यह जानकारी देने वाली कोई जानकारी नहीं मिल रही है, और PAROS और Ethereal के साथ मेरे अपने प्रयास ... संतोषजनक से कम हैं।

किसी भी पेशकश की सहायता के लिए धन्यवाद!

Trimiert

+0

मैं सी की तरह अजगर की तुलना में कम स्तर की भाषा में यह करने के लिए, सुझाव है/C++। – orlp

+13

@ रात्रिभोजक: मैं दृढ़ता से असहमत हूं। स्कैपी आपको सी या सी ++ प्रोग्रामर की किसी भी चीज के बारे में चिंता किए बिना पैकेट को आसानी से बनाने और भेजने देता है। यदि आप रुचि रखते हैं कि नेटवर्क कैसे काम करते हैं, तो स्कापी जाने का रास्ता है। यदि आप एक वास्तविक सर्वर लिखना चाहते हैं, तो शायद एक अलग भाषा अधिक उपयुक्त है। और मैं इसे किसी ऐसे व्यक्ति के रूप में कहता हूं जो जीवित रहने के लिए नेटवर्क उपकरणों के लिए सी कोड लिखता है। – nmichaels

+3

@OP: सुनें कि nmichaels क्या कहता है। मैं सिर्फ 16 वर्ष का हूं, सब कुछ के बारे में एक (बिना आधार) राय। – orlp

उत्तर

34

आप एक पूर्ण तीन तरह हाथ मिलाना क्या करना चाहते हैं, तो आप इसे मैन्युअल रूप से करना होगा।

अपने SYN पैकेट के साथ

प्रारंभ:

>>> syn = IP(dst='www.google.com')/TCP(dport=80, flags='S') 
>>> syn 
<IP frag=0 proto=tcp dst=Net('www.google.com') |<TCP dport=www flags=S |>> 

तो सर्वर, SR1 कार्यों से SYN-एसीके पैकेट प्राप्त करते हैं।

>>> syn_ack = sr1(syn) 
Begin emission: 
Finished to send 1 packets. 
* 
Received 1 packets, got 1 answers, remaining 0 packets 

>>> syn_ack 
<IP version=4L ihl=5L tos=0x0 len=44 id=424 flags= frag=0L ttl=55 proto=tcp chksum=0x2caa src=74.125.226.148 dst=10.20.30.40 options=[] |<TCP sport=www dport=ftp_data seq=3833491143 ack=1 dataofs=6L reserved=0L flags=SA window=5720 chksum=0xd8b6 urgptr=0 options=[('MSS', 1430)] |<Padding load='\x00\x00' |>>> 

फिर अपने टीसीपी अनुक्रम और पावती संख्या निर्धारित करने और भेजने: फिर अपने HTTP GET अनुरोध भेजने

getStr = 'GET/HTTP/1.1\r\nHost: www.google.com\r\n\r\n' 
request = IP(dst='www.google.com')/TCP(dport=80, sport=syn_ack[TCP].dport, 
      seq=syn_ack[TCP].ack, ack=syn_ack[TCP].seq + 1, flags='A')/getStr 
reply = sr1(request) 
+0

बहुत बहुत धन्यवाद! अब तक की सबसे अच्छी जानकारी मैंने अभी तक देखी है। और हाँ, मैंने खुद को तीन तरह से हिलाकर रखने की योजना बनाई थी, लेकिन जितना मेरे पास था उतना ही था। धन्यवाद! – Trimiert

+0

क्या स्नीफ का उपयोग करके एक http पैकेट को कैप्चर करने का तरीका है और बाद में इसमें http शीर्षलेख डालें? – fayyazkl

+3

@fayyazkl: यही वह चीज है जो अपना स्वयं का प्रश्न होना चाहिए। – nmichaels

1

आप the tutorial पर एक नज़र था? बस प्रतिलिपि करने और चिपकाने, इस लगता है कि यह एक HTTP अनुरोध इकट्ठा करने के लिए जा रहा है:

>>> a=Ether()/IP(dst="www.slashdot.org")/TCP()/"GET /index.html HTTP/1.0 \n\n" 
+1

हाँ, मैंने किया। लेकिन बस इसे भेजना ऐसा प्रतीत नहीं होता था, और मुझे पैकेट स्तर पर यह कैसे काम करता है इसका कोई विचार नहीं देता है। – Trimiert

+0

मेरे लिए भी काम नहीं करता है। बस हमेशा के लिए प्राप्त करने की कोशिश करता है। –

+0

प्रश्न पूछता है कि पैकेट स्तर पर http प्राप्त करने का अनुरोध कैसे करें और यह उत्तर इसे स्पष्ट करता है। तथ्य यह है कि आपको टीसीपी हैंडशेक करने की आवश्यकता है। ऐसा मत सोचो कि प्रतिक्रिया में कुछ भी गलत है। हालांकि, जो लोग टीसीपी हैंडशेक के बारे में नहीं जानते हैं, उन्हें सही उत्तर का संदर्भ लेना चाहिए। –

संबंधित मुद्दे