أريد أن أجلب البيانات التي تكون موجودة في الــTCP header مثل الــdata والــAcknowledgement number وباقي المحتويات برمجيا بلغة vb.net
شكرا لكم
أريد أن أجلب البيانات التي تكون موجودة في الــTCP header مثل الــdata والــAcknowledgement number وباقي المحتويات برمجيا بلغة vb.net
شكرا لكم
يتم ذلك بابرمجة على مستوى الـRaw Socket (الموضوع مشروح في سلسلة دروس برمجة الشبكات)
وهذا مثال ممتاز من الكود بروجكت
http://www.codeproject.com/cs/internet/CSNetworkSniffer.asp
سأقوم إن شاء الله قريبا بوضع درس اضافي لشرح هذا الموضوع بشكل مفصل
مرحبا أستاذ فادي
لدي هذا الكود وهو جزء من برنامج
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:
اختي الكريمة
لو قرأت الدرس الأخير في سلسلة دروس تعلم برمجة الشبكات لفهمت المقصد من استخراج البيانات من الـIP Header والـTCP Header بهذه الطريقة
اتمنى منك في البداية قراءة الدروس وفي حالة صعب عليك اي امر يمكنك السؤال عنه وستجدي المساعدة بإذن الله
1- لقد ذكرت في الدرس
اقتباسويمكننا مثلا معرفة الـ IP Address لطرف المرسل من خلال تخزين الـ Packet الملتقط في Byte Array ثم تغيير الـ offset للـمكان الذي نريد القراءة منه ، إذ يأتي موقع الـ IP Source Address في الـ IP Packet دائما بعد 12 Bytes
كيف عرفت أن موقع الـ IP Source Address في الـ IP Packet دائما بعد 12 Bytes؟؟؟؟؟؟؟؟؟
2- لدي برنامج يلتقط الــpackets ولكن عندما أشغله على الانترنت يظهر هذا الخطأ بشكل متكرر فما هو السبب؟؟؟؟ مع العلم أنه متصل بقاعدة بيانات
3-ماذا أعمل حتى ألتقط packets من عدة أجهزة متصلة بشبكتي؟؟؟
اختي النغم الخجول
لو نظرتي الى التركيب العام للـIP Header
لوجدت انه مقسوم إلى 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
وهلا وسهلا بك
الجزء الغامض هو الــoptions
ماهي محتوياته؟؟؟
وهل أتأكد من محتوياته قبل أن أتأكد من طول الــpacket؟؟؟
هل يحدث packet طولها أقل من 20 ,وماذا تحتوي؟؟؟؟
الجزء الثاني:
لماذا تضربون في أعداد hexadecimal يعني حتى البرنامج الذي معي يضرب في HF0&
فما الفائدة؟؟
وماهي فائدة <<؟؟؟
الجزء الغامض هو الــoptions
ماهي محتوياته؟؟؟
وهل أتأكد من محتوياته قبل أن أتأكد من طول الــpacket؟؟؟
هل يحدث packet طولها أقل من 20 ,وماذا تحتوي؟؟؟؟
الجزء الثاني:
لماذا تضربون في أعداد hexadecimal يعني حتى البرنامج الذي معي يضرب في HF0&
فما الفائدة؟؟
وماهي فائدة <<؟؟؟
السلام عليكم
سأحاول الإجابة على الإستفسار حول تركيبة الحقل 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) ليكون مماثل للبقية
والله أعلم
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…