עבור לתוכן

לרדת לשכבה 2 ושכבה אחת במודל OSI איך?

Featured Replies

פורסם

שלום לכולם.

לצורך תהעניינות בתקשורת החלטתי לרדת לשכבות נמוכות של OSI ולראות את ה HEADERים של כל מיני חבילות. נכון לעכשיו אני יושב בשכבה 3 (IP).

אני מסוגל לקבל חבילות, להדפיס אל ה HEADER שלהן (פרטים כגון מקור-יעד, גודל, FLAGS) לזהות מה הוא ה HEADER של השכבה הבאה (TCP, UDP).

אני רוצה לרדת יותר נמוך (אני מאמין שאפשר לפחות עד שכבה 2 [שכבה אחת לא נראה לי שאפשר {עוד לא ממש בקיא בתחום}]), ולקבל חבילה ישר הרגע הגעתה, כאילו להתיישב על כרטיס הרשת ממש. האם קיימת אפשרות כזאת? אם כן איך אני ממש את זה בשפת C/C++ בסביבת חלונות XP?

תודה רבה מראש

פורסם

אתה בקיא בכתיבת דרייברים? בעקרון אין בעיה לכתוב Filter Driver להדביק אותו על הSTACK של הכרטיס רשת, אבל זה לא "לרדת" לשכבה שניה אין בדיוק דבר כזה, השאלה מה בדיוק אתה רוצה לעשות.

פורסם
  • מחבר

אתה בקיא בכתיבת דרייברים? בעקרון אין בעיה לכתוב Filter Driver להדביק אותו על הSTACK של הכרטיס רשת' date=' אבל זה לא "לרדת" לשכבה שניה אין בדיוק דבר כזה, השאלה מה בדיוק אתה רוצה לעשות.

[/quote']

לא לא ממש בקיא בכתיבת דרייברים. הרעיון הוא שכרגע אני "מאזין" לשכבה שלישית (פתחתי RAW סוקט שמאזין לכל הIPים ולכל הפורטים), כלומר החיבלות שאני מקבל הן חבילות שכבר עברו שכבה ראשונה ושנייה. אני ששכבה שנייה מכילה את כתובות ה MAC לדוגמא של המקור והיעד, ושכבה ראשונה זה אוסף ביטים כבר.

סכמה:

שכבה1 -> שכבה2 -> שכבה3 -> שכבה4 ->...

^ ^

| |

| אני פה נכון לעכשיו

-------------

|

אבל אני רוצה לגעיה לפה

כלומר לקבל את החבילה עוד לפי שהיא עובר בשכבה שנייה (ואני מאמין שזה אפשרי).

[עריכה]

מצאתי אין לנסח את זה:

האם יש דרך להאזין לשכבה שנייה/רשאונה של מודל OSI בלי לכתוב דרייבר אשר ישב על הכרטיס ויעשה את זה (להושיב דרייבר/תוכנה כל שהיא על כרטיס הרשת אני מאמין שאפשר 100% [שוב גם פה חסר לי תיאוריה]) כמו לדוגמא אני מאזין לשכבה 3 ללא שום צורך בכלים מיוחד פרטי לתיחת סוקט RAW.

[עריכה 2]

כנראה שאי אפשר.

קראתי על PCAP שזו ספרייה שכן אפשר לעשות את זה בה אבל כתוב שהיא "מתיישבת" על כרטיס הרשת על ידי שימוש ב NDIS ובספריות LOW LEVEL בשביל לתקשר עם דרייברים.

פורסם

שוב פעם אתה צריך להבדיל בין המודל התאורתי, ולמה שאתה עובד מולו בפועל.

ברמת התוכנה אתה עובד מול הIP Stack של מערכת ההפעלה שלך, כלומר אתה מוגבל למספר דברים, למשל אם מגיעה חבילה בbroadcast שהמחשב לא אמור להתחייס אליה אתה לא תוכל לקרוא אותה כיוון שהיא לא מגיע לIP Stack, בשביל להרים סניפר אמיתי אתה צריך לעבוד ברמה יותר נמוכה, וכאן מדובר על רמות אפליקטיביות כלומר kernel mode מול user mode.

שוב מה בדיוק אתה רוצה לעשות? אתה יכול להגיד סתם "טוב אני עובד בשכבה שניה", תבנה אפליקציה שלא יודעת מה זה TCPIP אלא עובדת רק עם ARP והנה אתה עובד בשכבה "השניה"(למרות שזה לא מדוייק, ברגע שאתה מרים תקשורת אתה כבר יש קופץ לשביעית כיוון שבכל מקרה מדובר על תקשורת אפליקטיבית, צריך להבין שמודל הTCP/IP זה נחמד אבל בפועל אלא אם אתה עובד עם ציוד תקשורת מ0 אתה עובד על פי החוקיות שלו ולא לפי המודל כפי שאתה חושב) מבלי בכלל להכנס למשהו עמוק מבחינת מכלול התקשורת שמערכת ההפעלה שלך מריצה והיא תדאג כבר לשאר.

בין איך שמודל הTCP/IP או OSI או וואטבר ממומש במערכת הפעלה לעבודה עם השכבות שלו בפועל יש הבדל גדול, אם אתה רוצה לבנות משהו שתופס את כל החבילות בלי שום קשר לחוקיות שמערכת ההפעלה מריצה כלומר בסופו של דבר אימפלמנטציה של מודל הTCP/IP, אתה צריך לבנות filter driver שיושב נמוך יותר בstack ובעצם מאפשר לך לקלוט את החבילות לפני שהן עוברות סינון שמערכת ההפעלה מריצה על כל דבר שנכנס ביי דיפולט, זה לא אומר שאתה עובד בשכבה שניה אין לזה קשר למודל הOSI יש לזה קשר לאיך שמערכת ההפעלה בנויה, אנטיווירוס עובד באותה דרך הוא מכניס filter driver לfile system driver stack ומאזין לכל הפעולות ברמה יותר נמוכה ממה שאפליקציה רגילה יכולה לקלוט.

תקרא על KMDF, במיוחד בהקשר של NDIS.

פורסם

רק הערה קטנה: שכבה אחת היא פיזית - חומרה. אין לך למה "להאזין" שם, אלא אם אתה מתכנן ללכוד אלקטרונים או פוטונים.

פורסם
  • מחבר

דובי זובי ואו תודה רבה על ההסבר המפורט הזה, זה באמת שם כמה דברים במקום שלהם. באמת תודה!

איסתרא בלגינא

ככה חשבתי בגלל זה לא הייתי בטוח לגבי השכבה הראשונה.

פורסם

עבור windows: יש מספר חבילות שניתן להתקין במחשב - הן דואגות להתקין מה שצריך במערכת ומספקות API עבור המתכנת על מנת לקבל גישה לנתוני שכבה 2.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים