الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أصل إلى محتويات الTCP header

مغلق
بدأه النغم الخجول في 27 يناير 2007 · 9 رد · 1,010 مشاهدة · في برمجة الشبكات والتطبيقات الموزعة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أريد أن أجلب البيانات التي تكون موجودة في الــTCP header مثل الــdata والــAcknowledgement number وباقي المحتويات برمجيا بلغة vb.net

شكرا لكم

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#2

up

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#3

يتم ذلك بابرمجة على مستوى الـRaw Socket (الموضوع مشروح في سلسلة دروس برمجة الشبكات)

وهذا مثال ممتاز من الكود بروجكت

http://www.codeproject.com/cs/internet/CSNetworkSniffer.asp

سأقوم إن شاء الله قريبا بوضع درس اضافي لشرح هذا الموضوع بشكل مفصل

#4

شكرا لك وأنا بانتظار الدرس

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#5

مرحبا أستاذ فادي

لدي هذا الكود وهو جزء من برنامج

Public Sub New(ByVal raw() As Byte)
			Me.New(raw, DateTime.Now)
		End Sub
		Public Sub New(ByVal raw() As Byte, ByVal time As DateTime)

			If raw Is Nothing Then Throw New ArgumentNullException
			If raw.Length < 20 Then Throw New ArgumentException
			m_Raw = raw
			m_Time = time
			'm_Version = (raw(0) & &HF0) >> 4
			m_HeaderLength = (raw(0) And &HF) * 4
			If (raw(0) And &HF) < 5 Then Throw New ArgumentException
			m_Precedence = ((raw(1) And &HE0) >> 5)
			m_Delay = ((raw(1) And &H10) >> 4)
			m_Throughput = ((raw(1) And &H8) >> 3)
			m_Reliability = ((raw(1) And &H4) >> 2)
			m_TotalLength = raw(2) * 256 + raw(3)
			If Not m_TotalLength = raw.Length Then Throw New ArgumentException ' invalid size of packet
			m_Identification = raw(4) * 256 + raw(5)
			m_TimeToLive = raw(8)

			'if (Enum.IsDefined(typeof(Protocol),  raw(9)))
			m_Protocol = raw(9)
			'Else
			'm_Protocol = Protocol.Other
			'END IF 

			ReDim m_Checksum(2)
			m_Checksum(0) = raw(11)
			m_Checksum(1) = raw(10)



			Try
				m_SourceAddress = GetIPAddress(raw, 12)
				m_DestinationAddress = GetIPAddress(raw, 16)
			Catch ex As Exception
				'MsgBox(ex.Message)
			End Try

			If m_Protocol = Protocol.Tcp Or m_Protocol = Protocol.Udp Then
				m_SourcePort = raw(m_HeaderLength) * 256 + raw(m_HeaderLength + 1)
				m_DestinationPort = raw(m_HeaderLength + 2) * 256 + raw(m_HeaderLength + 3)
			Else
				m_SourcePort = -1
				m_DestinationPort = -1
			End If

		End Sub

Public Function GetIPAddress(ByVal bArray() As Byte, ByVal nStart As Integer) As String
			Dim tmp(3) As Byte
			If bArray.Length > nStart + 2 Then
				tmp(0) = bArray(nStart)
				tmp(1) = bArray(nStart + 1)
				tmp(2) = bArray(nStart + 2)
				tmp(3) = bArray(nStart + 3)
			End If

			Return tmp(0) & "." & tmp(1) & "." & tmp(2) & "." & tmp(3)
		End Function

ولكني لاأستطيع أن أفهم لماذا يختار مواقع معينة من الــbuffer مع أن هناك 1500 موقع وقد استخدم أقل من ربعها!! كيف عرف ان ip هو ذلك الموقع في الــbuffer والثلاث الذين يلونه؟؟

أرجوك فهمني :blink:

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#6

اختي الكريمة

لو قرأت الدرس الأخير في سلسلة دروس تعلم برمجة الشبكات لفهمت المقصد من استخراج البيانات من الـIP Header والـTCP Header بهذه الطريقة

اتمنى منك في البداية قراءة الدروس وفي حالة صعب عليك اي امر يمكنك السؤال عنه وستجدي المساعدة بإذن الله

#7

1- لقد ذكرت في الدرس

اقتباس
ويمكننا مثلا معرفة الـ IP Address لطرف المرسل من خلال تخزين الـ Packet الملتقط في Byte Array ثم تغيير الـ offset للـمكان الذي نريد القراءة منه ، إذ يأتي موقع الـ IP Source Address في الـ IP Packet دائما بعد 12 Bytes

كيف عرفت أن موقع الـ IP Source Address في الـ IP Packet دائما بعد 12 Bytes؟؟؟؟؟؟؟؟؟

2- لدي برنامج يلتقط الــpackets ولكن عندما أشغله على الانترنت يظهر هذا الخطأ بشكل متكرر فما هو السبب؟؟؟؟ مع العلم أنه متصل بقاعدة بيانات

f57c077bd5.jpg

3-ماذا أعمل حتى ألتقط packets من عدة أجهزة متصلة بشبكتي؟؟؟

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#8

اختي النغم الخجول

لو نظرتي الى التركيب العام للـIP Header

25_07_06_05_16_23_1153872983row_.JPG

لوجدت انه مقسوم إلى 6 اجزاء في كل جزء 32 بيت اي ما يعادله 4 بايت إذا قسمنا 32\8 ولاحظي ان الجزء الخاص بعنوان المرسل يقع بعد 96 والذ يعني 12 بايت بعد تقسيمه على 8 ويليه بعد 4 بايت عنوان المرسل اليه ثم الـ Options والتي يمكن معرفة إذا كانت مستخدمة ام لا من خلال الـHeader Length والواقع في البايت الأول من الـIP Header فإذا كانت قيمته اكبر من 20 وهو الحجم الكلي الإفتراضي للـIP Header عندها نعرف ان هنالك Options وإلا فإن الـIP Header لا يحتوي على اي Options وهذا يعني ان الـData ستبدأ بعد 20 بايت , اما الحجم الأقصى للـIP Header فهو 60 بايت ويختلف بناء على وجود الـOptions والتي ذكرناها سابقا

بانسبة للرسالة السابقة فهي غير واضحة ولن استطيع معرفة الخطأ إلى إذا ارفقت الكود و أفضل البرنامج , على اي حال في حالة اردت التصنت على الـPacket الآتية من الإنترنت فهذا يعتمد على امرين

الأول في حالة كان اتصالك مباشر من خلال موديم الموجود داخل الجهاز عندها يجب تغيير الـNetwork Interface إلى الموديم

الثاني في حالة كان اتصالك بالإنترنت من خلال كابل Ethernet موصول براوتر فيتم التصنت من خلال نفس الـEthernet Network Interface

وهلا وسهلا بك

#9

الجزء الغامض هو الــoptions

ماهي محتوياته؟؟؟

وهل أتأكد من محتوياته قبل أن أتأكد من طول الــpacket؟؟؟

هل يحدث packet طولها أقل من 20 ,وماذا تحتوي؟؟؟؟

الجزء الثاني:

لماذا تضربون في أعداد hexadecimal يعني حتى البرنامج الذي معي يضرب في HF0&

فما الفائدة؟؟

وماهي فائدة <<؟؟؟

الجزء الغامض هو الــoptions

ماهي محتوياته؟؟؟

وهل أتأكد من محتوياته قبل أن أتأكد من طول الــpacket؟؟؟

هل يحدث packet طولها أقل من 20 ,وماذا تحتوي؟؟؟؟

الجزء الثاني:

لماذا تضربون في أعداد hexadecimal يعني حتى البرنامج الذي معي يضرب في HF0&

فما الفائدة؟؟

وماهي فائدة <<؟؟؟

النغم الخجول

14_07_06_10_56_13_1152942973_6__4__6__1_5__56_1144313576165_8_-6.jpg

#10

السلام عليكم

سأحاول الإجابة على الإستفسار حول تركيبة الحقل Options

يحتوي الحقل Options على ثلاثة أجزاء وهي

1. C: Copy إمكانية نسخ الحقلoption في بقية التقسيمات(1) أو لا (0). بية واحد

2. Class: إثنان بية

(00)Control.

(01) Reserved.

(10) Debugging and measurement.

(11) Reserved

Option + Copy + Class + Value + Length : Option .3 خمسة بية

المصدر

http://www.networksorcery.com/enp/protocol/ip.htm#Options

للمزيد من التفاصيل أنظر هذا الملف الرائع

http://www.sans.org/resources/tcpip.pdf

حجم الصناديق يكون دائما وعادة عندما يكون الصندوق(packet) الأخير أقل حجما فيضاف له حشو(padding) ليكون مماثل للبقية

والله أعلم

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…