2009-03-28 9 views
14

मैं वर्तमान में एक ऐसे कार्यक्रम पर काम कर रहा हूं जो टीसीपी पैकेट भेजे जा रहे हैं और किसी विशेष पते से प्राप्त किए गए हैं। जो मैं पूरा करने की कोशिश कर रहा हूं वह कुछ निश्चित पैकेटों के लिए कस्टम अनुरूप पैकेट के साथ जवाब दे रहा है। मुझे पहले ही पार्सिंग मिल चुकी है। मैं पहले से ही वैध ईथरनेट, आईपी, और - अधिकांश भाग के लिए - टीसीपी पैकेट जेनरेट कर सकता हूं।टीसीपी: सीईसी/एएके संख्याएं कैसे उत्पन्न की जाती हैं?

एकमात्र चीज जिसे मैं समझ नहीं सकता वह यह है कि सीईसी/एएके संख्याएं कैसे निर्धारित की जाती हैं।

हालांकि यह समस्या के लिए अप्रासंगिक हो सकता है, प्रोग्राम WinPCap का उपयोग कर C++ में लिखा गया है। मैं किसी भी सुझाव, लेख, या अन्य संसाधनों के लिए पूछ रहा हूं जो मेरी मदद कर सकते हैं।

+0

मानकों से संबंधित जानकारी के लिए सबसे अच्छी जगह आमतौर पर मूल आरएफसी (टिप्पणियों के लिए अनुरोध) है, इस मामले में, [आरएफसी 2018] (http: //tools.ietf .org/html/rfc2018)। सामान्य रूप से [विकिपीडिया] (http://en.wikipedia.org/wiki/Transmission_Control_Protocol) देखने के लिए भी एक अच्छी जगह है। ऐसा विफल होने पर, आपको परिणाम प्राप्त करने की लगभग गारंटी दी जाती है [यहां] (http://tinyurl.com/dkkjfn)। –

उत्तर

23

जब कोई टीसीपी कनेक्शन स्थापित होता है, तो प्रत्येक पक्ष यादृच्छिक संख्या को प्रारंभिक अनुक्रम संख्या के रूप में उत्पन्न करता है। यह एक दृढ़ता से यादृच्छिक संख्या है: सुरक्षा समस्याएं हैं यदि इंटरनेट पर कोई भी अनुक्रम संख्या अनुमान लगा सकता है, क्योंकि वे आसानी से टीसीपी स्ट्रीम में इंजेक्ट करने के लिए पैकेट को फोर्ज कर सकते हैं।

इसके बाद, प्रत्येक बाइट संक्रमित संख्या के लिए अनुक्रम संख्या 1 से बढ़ेगी। एसीके फ़ील्ड दूसरी तरफ अनुक्रम संख्या है, जिसे स्वीकृति रिसेप्शन पर वापस भेजा गया है।

आरएफसी 793 (मूल टीसीपी प्रोटोकॉल विनिर्देश) बहुत मददगार होगा।

+2

एके फ़ील्ड * नहीं * दूसरी तरफ से सीक # नहीं है, लेकिन सीक # + प्राप्त लंबाई (जैसा कि नीचे जेनी खान उत्तर में है) –

0

कनेक्शन के बाद अनुक्रम संख्या वृद्धि हुई है। नए कनेक्शन पर प्रारंभिक अनुक्रम संख्या आदर्श रूप से यादृच्छिक रूप से चुनी जाती है लेकिन बहुत सारे ओएस के कुछ अर्ध-यादृच्छिक एल्गोरिदम होते हैं। TCP RFC और अधिक जानने के लिए आरएफसी सबसे अच्छी जगह है।

1

RFC 793 अनुभाग 3.3 अनुक्रम संख्याओं को कवर करता है। पिछली बार मैंने उस स्तर पर कोड लिखा था, मुझे लगता है कि हमने अनुक्रम संख्याओं के लिए एक-अप काउंटर रखा है जो जारी रहा।

1

ये मान कनेक्शन के प्रारंभिक अनुक्रम संख्या के सापेक्ष पैकेट के लिए पेलोड की शुरुआत के अपेक्षित ऑफ़सेट का संदर्भ देते हैं।

Reference

क्रम संख्या (32 बिट) - एक दोहरी भूमिका SYN ध्वज सेट है, तो यह प्रारंभिक क्रम संख्या है। वास्तविक पहली डेटा बाइट की क्रम संख्या तो इस क्रम संख्या और 1. हो जाएगा SYN ध्वज सेट नहीं है, तो यह पहली डेटा बाइट

पावती संख्या के क्रम संख्या (है 32 बिट्स) - यदि एसीके ध्वज सेट है तो इस क्षेत्र का मान अगले अपेक्षित बाइट है कि रिसीवर की अपेक्षा है।

1

संख्या दोनों तरफ से यादृच्छिक रूप से उत्पन्न होती है, फिर ऑक्टेट्स (बाइट्स) भेजने की संख्या में वृद्धि होती है।

2

लगता है कि उत्तर के बाकी काफी सब जहां एसीके के बारे में विस्तृत और आधिकारिक जानकारी, अर्थात् TCP RFC

यहाँ खोजने के लिए के बारे में विस्तार से बताया एक और अधिक व्यावहारिक और "समझा आसान" पृष्ठ कि मैंने पाया जब मैं इसी तरह की कर रहा था है कार्यान्वयन जो TCP Analysis - Section 2: Sequence & Acknowledgement Numbers

+0

लिंक के लिए धन्यवाद :) – xian

+0

लिंक –

4

मदद कर सकता है यदि मैं आपको सही ढंग से समझता हूं - तो आप TCP SEQ prediction attack पर माउंट करने की कोशिश कर रहे हैं। यदि ऐसा है, तो आप अपने लक्षित ओएस के Initial Sequence Number जनरेटर के विनिर्देशों का अध्ययन करना चाहेंगे।

बहुत अधिक all the major OS's में व्यापक रूप से प्रचारित vulnerabilties व्यापक रूप से उनके आईएसएन जेनरेटर अनुमान लगाया जा रहा था। मैंने बारीकी से गिरावट का पालन नहीं किया है, लेकिन मेरी समझ यह है कि ज्यादातर विक्रेताओं ने randomize their ISN increments पर पैच जारी किए।

4

मेरे पास एक ही काम है। सबसे पहले प्रारंभिक seq # यादृच्छिक रूप से उत्पन्न किया जाएगा (0-4294967297)। फिर रिसीवर प्राप्त डेटा की लंबाई की गणना करेगा और प्रेषक को seq# + length = x का एसीके भेज देगा। अनुक्रम तब एक्स होगा और प्रेषक डेटा भेज देगा। इसी प्रकार रिसीवर लंबाई x + length = y गिनती और एसीके y के रूप में भेजने और इतने पर होगा ... इसका कैसे seq/एसीके उत्पन्न होता है ...

आप यह व्यावहारिक रूप से Wireshark में एक पैकेट सूंघ करने की कोशिश को दिखाना चाहते हैं और टीसीपी धारा का पालन करें और परिदृश्य देखें ...

+1

के लिए धन्यवाद स्पष्टता में सुधार आपके उत्तर का – JSuar

+0

आप इस तरह टर्मिनल से पैकेट भी कैप्चर कर सकते हैं: sudo tcpdump -i eth0 – zee