You are on page 1of 5

‫מבוא לרשתות מחשבים – תרגיל ‪6‬‬

‫שכבת האפליקציה‬
‫יש להגיש את העבודה בזוגות כקובץ ‪ pdf‬יחיד בפורמט קריא וברור‪ .‬שימו לב שישנן ‪ 7‬שאלות‬
‫בעבודה ושאתם מגישים פתרון לכולן‪ .‬שימו לב שבניגוד לעבודות הקודמות יש לעבודה ‪ 2‬חלקים;‬
‫חלק ראשון תיאורטי (‪ 2‬שאלות) וחלק שני מעשי (המורכב מ‪ 3‬פרקים; ‪ 2‬פרקים חובה ופרק רשות‪.‬‬
‫סה"כ ‪ 5‬שאלות חובה)‪.‬‬

‫חלק ראשון – שאלות תיאורטיות‬

‫‪ .1‬הסבר בקצרה את השדות הבאים ב‪ header-‬של ‪ .HTTP‬עבור כל שדה‪ ,‬ציין האם נשלח ע"י‬
‫הלקוח או השרת‪.‬‬
‫‪Cookie .a‬‬
‫‪Set Cookie .b‬‬
‫‪Host .c‬‬
‫‪Range .d‬‬
‫‪Content-Length .e‬‬
‫‪Last-Modified .f‬‬
‫‪ .2‬מדוע ‪ DNS‬משתמש ב‪( UDP-‬בדר"כ) ולא בפרוטוקול האמין ‪ TCP‬כפרוטוקול תעבורה?‬

‫חלק שני – עבודה מעשית‬

‫חלק א' ‪DNS -‬‬

‫החלק המעשי יתבצע על מחשביכם הפרטיים או מחשבים במעבדות‪ ,‬בפרט – שהם בעלי מערכת‬
‫הפעלה של ‪ .Linux‬מומלץ לקרוא את כל ההוראות לפני שמתחילים את החלק המעשי‪.‬‬
‫הציון שניתן על החלק המעשי מחושב החל משאלה ‪( 2‬המטלה עצמה)‪ .‬בכל שאלה תתבקשו לצרף‬
‫הוכחה שהניסוי בוצע‪ ,‬ובמידה ולא תמצא דין השאלה כלא הוגשה‪.‬‬

‫‪ .1‬בטרמינל‪ ,‬יש לבדוק האם ‪ dig‬מותקן‪:‬‬

‫‪dig -v‬‬

‫אם הוא מותקן‪ ,‬אז הפלט של הפקודה אמור להיות דומה לפלט הבא‬

‫‪DiG 9.18.1-1ubuntu1.1-Ubuntu‬‬

‫במידה ולא קיבלתם פלט דומה‪ ,‬יש להתקין את החבילה ‪:dnsutils‬‬

‫‪sudo apt-get install dnsutils‬‬


‫‪ .2‬הקלידו את הפקודה הבאה בטרמינל וצלמו את הפלט של הפקודה‪:‬‬

‫‪dig google.com‬‬

‫‪ .3‬בהתאם לצילום שצירפתם‪ ,‬ענו על השאלות הבאות‪:‬‬


‫‪ .a‬כמה זמן לקחה השאילתה?‬
‫‪ .b‬באיזה פרוטוקול בשכבת התעבורה (‪ TCP‬או ‪ )UDP‬משתמשת השאילתה?‬
‫‪ .c‬ב‪ ,Answer Section-‬מה משמעות העמודות השונות?‬
‫‪ .4‬באמצעות לחיצה על המקש "^" (חץ למעלה) ו‪ ,Enter-‬תחזרו על השאילתות לפחות פעמיים‬
‫(כמה שיותר מהר)‪ .‬מה ערך ה‪ Query Time-‬כעת? מדוע הוא השתנה?‬

‫חלק ב' ‪HTTP -‬‬

‫החלק המעשי הנוכחי ניתן לעשות על מחשבים עם מערכת הפעלה של ‪ ,Windows‬אך ניתן גם ב‪-‬‬
‫‪ .Linux‬התרגיל דורש שימוש ברחרחן מנות (‪ )Packet Sniffer‬בשם ‪ .Wireshark‬ה‪Wireshark-‬‬
‫הוא תוכנה חינמית וניתן להוריד אותה מהאינטרנט‪ .‬מומלץ לקרוא את כל ההוראות לפני‬
‫שמתחילים את החלק המעשי‪.‬‬
‫הציון שניתן על החלק המעשי מחושב החל משאלה ‪( 3‬המטלה עצמה)‪ .‬בכל שאלה תתבקשו לצרף‬
‫הוכחה שהניסוי בוצע‪ ,‬ובמידה ולא תמצא דין השאלה כלא הוגשה‪.‬‬

‫‪ .1‬התקינו ‪ Wireshark‬על המחשבים שלכם‪:‬‬

‫‪sudo apt-get install wireshark‬‬


‫ייתכן ותצטרכו לעדכן את מערכות ההפעלה שלכם על מנת להתקין את התוכנות הנ"ל‪:‬‬

‫‪sudo apt-get update‬‬

‫‪sudo apt update‬‬

‫עבור ‪ Windows‬ניתן להוריד מהקישור הבא‬

‫‪https://www.wireshark.org/download.html‬‬

‫‪ .2‬הפעילו את ה‪:Wireshark-‬‬
‫‪sudo wireshark‬‬
‫יש לבחור לנתר את החיבור שלכם לרשת‪ .‬במידה ואתם לא יודעים איזה לחיבור לקחת‬
‫(לדוגמה‪ ,‬בתמונה למטה קיימים ‪ eth0‬ו‪ )eth1-‬ניתן דרך פקודת ‪ ifconfig‬לוודא את החיבור‬
‫הדרוש או לבחור את הממשק ‪.any‬‬
‫במידה ואתם מקבלים תקלה‪:‬‬
‫‪couldn't run /usr/bin/dumpcap in child process: Permission Denied‬‬
‫יש להריץ את הפקודות הבאות‪ ,‬ואחריהן לאתחל את המחשב‪:‬‬
‫‪sudo dpkg-reconfigure wireshark-common‬‬
‫‪sudo adduser $USER wireshark‬‬
‫‪ .3‬בשורת הסינון של ה‪ ,Wireshark-‬יש להכניס את הפקודה הבאה‪:‬‬
‫‪http‬‬

‫דך דפדפן האינטרנט שלכם‪ ,‬הכנסו לקישור הבא‪:‬‬

‫‪http://gaia.cs.umass.edu/wireshark-labs/HTTP-wireshark-file2.html‬‬

‫אתם אמורים לראות טקסט של ‪ 5‬שורות‪ .‬רעננו את העמוד הזה‪ .‬צרפו צילום מסך של הפלט‬
‫של ‪ Wireshark‬אחרי הרענון‪.‬‬
‫שימו לב ששחזור של הניסוי במידה ולא צילמתם דורש לנקות את ה‪ Cache-‬של דפדפן‬
‫האינטרנט שלכם (מקבצים זמניים)‪.‬‬
‫‪ .4‬ענו על השאלות הבאות‪.‬‬
‫‪ .a‬האם ב‪ HTTP GET-‬הראשון יש את השדה "‪?"If-Modified-Since‬‬
‫‪ .b‬האם השרת בתגובה הראשונה שלח את כל תוכן הטקסט? צרפו צילום מסך המצדיק‬
‫את תשובתכם‪.‬‬
‫‪ .c‬האם ב‪ HTTP GET-‬השני יש את השדה "‪ ?"If-Modified-Since‬צרפו צילום מסך‬
‫המצדיק את תשובתכם‪.‬‬
‫‪ .d‬האם השרת בתגובה השנייה שלח את כל תוכן הטקסט?‬
‫‪ .e‬מהם ה‪ HTTP Status Codes-‬בשתי הבקשות?‬
‫חלק ג' – ‪Socket Programming‬‬

‫תרגיל רשות‪ .‬ניתן לפתור את החלק המעשי גם בסביבת ‪ Windows‬וגם בסביבת ‪ .Linux‬שימו לב‬
‫שעל מנת שתוכלו ליצור קשר עם השרת יש להיות מחוברים לרשת האוניברסיטאית (ישירות דרך‬
‫כבל‪ Wi-Fi/‬או באמצעות ‪ .)VPN‬מומלץ לקרוא את כל ההוראות לפני שמתחילים את החלק‬
‫המעשי‪.‬‬
‫הציון שניתן על החלק המעשי מחושב החל משאלה ‪( 2‬המטלה עצמה)‪ .‬בכל שאלה תתבקשו לצרף‬
‫הוכחה שהניסוי בוצע‪ ,‬בנוסף לקוד‪ .‬במידה ולא תמצא דין השאלה כלא הוגשה‪.‬‬

‫‪ .1‬בדקו שיש תקשורת לשרת (שכתובתו היא ‪ )132.72.110.6‬באמצעות ‪:ping‬‬

‫‪ping 132.72.110.6‬‬

‫במידה וה‪ ping-‬נכשל‪ ,‬יש ליצור קשר עם סגל הקורס‪.‬‬


‫‪ .2‬יש לכתוב קוד ב‪ Python-‬אשר מייצר ‪ Socket‬של ‪ TCP‬לשרת בכתובת ‪132.72.110.6‬‬
‫בפורט ‪ .10000‬הקוד ישלח את שמות הסטודנטים בפורמט הבא (כ‪)String-‬‬

‫‪Full name 1 & Full name 2‬‬

‫מיד לאחר השליחה‪ ,‬יש לקלוט את ההודעה ששולח השרת ולהדפיסה‪ .‬על מנת להשתמש ב‪-‬‬
‫‪Socket‬ים ב‪ ,Python-‬יש לייבא את הספריה ‪:socket‬‬

‫‪import socket‬‬

‫מומלץ לכתוב את הקוד עם ‪ try-finally‬על מנת לוודא שה‪ Socket-‬נסגר במקרה של תקלה‪.‬‬
‫במידה ולא נסגר ה‪ Socket-‬במקרה של תקלה יש סיכוי שמערכת ההפעלה לא תיתן לכם‬
‫לפתוח ‪ Socket‬חדש מבלי לשנות לו הגדרות (כגון פורט)‪ .‬לנוחיותכם‪ ,‬בעמוד הבא מצורפות‬
‫כמה שורות קוד לשימושכם‪.‬‬
‫‪ .3‬מהי תגובת השרת?‬
‫שורות קוד רלוונטיות‬

:TCP ‫ של‬Socket ‫פתיחת‬

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

:‫התחברות לשרת‬

sock.connect((server_IP_as_string, port_as_integer))

:‫ אשר מכיל מחרוזת של השמות שלכם‬message ‫שליחת משתנה‬

sock.sendall(bytes(message, 'utf-8'))

.data ‫ בתים) לתוך המשתנה‬1000 ‫קריאת מידע שנשלח מהשרת (עד‬

data = sock.recv(1000)

:‫ שנקלט מלמעלה‬data ‫הדפסת‬

print(data.decode())

:Socket-‫סגירת ה‬

sock.close()

You might also like