PracticU

כתיבת Script המגלה כתובת IP חיצונית

בלי כתוביותעם כתוביות
PracticU › קורס פייתון - Python › כתיבת Script המגלה כתובת IP חיצונית
מילון מושגים:
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
כתובת IP - מספר שמזהה באופן ייחודי מכשיר ברשת מבוססת פרוטוקול IP, ומאפשר לשלוח אליו ולקבל ממנו מידע.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.
דפדפן - תוכנה שמציגה דפי אינטרנט ומריצה את הקוד שבהם, ומאפשרת לגלוש בין אתרים, למשל Chrome או Firefox.
Python - שפת תכנות עילית וקריאה, נפוצה בפיתוח, אוטומציה, ניתוח נתונים ולמידת מכונה.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.
תגית - סימון בקוד, למשל ב-HTML, שתוחם רכיב ומגדיר את תפקידו או תכונותיו. גם תווית לסימון וקיטלוג פריטים.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.

כתיבת Script המגלה כתובת IP חיצונית
סקריפט קצר מתחבר לאתר שמציג את כתובת ה-IP החיצונית של המחשב, ומחלץ את הכתובת מתוך קוד ה-HTML. הדוגמה מציגה שימוש מתקדם בשפה, ולא את הדרך המומלצת ביותר לקבל את הכתובת.
השלבים העיקריים
1. בדיקת מבנה הדף: פותחים את מקור הדף בדפדפן ומחפשים את הכתובת. בדוגמה היא נמצאת בתוך תגיות strong, והשאר לא רלוונטי.
2. בניית ביטוי רגולרי: משתמשים באתר regex101 ובוחרים Python. הביטוי מתאר מחרוזת קבועה, ואחריה תגית, ואחריה מספרים ונקודות. את הכתובת עצמה תופסים בסוגריים עגולים.
3. קריאת הדף: מייבאים את המודולים urllib ו-re. פותחים את הכתובת עם urlopen וקוראים את התוכן עם read.
4. חיפוש: re.findall מחזיר רשימה של כל ההתאמות, ו-re.search מחזיר את ההתאמה הראשונה. בדוגמה ניתן לראות שהאובייקט שחזר מ-search מכיל את הפונקציה groups.
5. סקריפט: מעתיקים את הקוד לקובץ נפרד ומריצים אותו. הסקריפט מדפיס את כתובת ה-IP.
טעויות נפוצות
- ביטוי רגולרי שנכתב עם לוכסן כפול נשבר. הפתרון הוא להוסיף את האות r לפני המחרוזת, כדי שהלוכסן יתפרש כתו בודד.
- שכחה של נקודה בביטוי גרמה לשגיאה "nothing to repeat". הבדיקה שורה אחר שורה עוזרת לגלות את הטעות.
שימו לב
כשמתקבלת השגיאה "invalid expression", הביטוי הרגולרי אינו תקין. קריאה מדויקת של הקוד מאפשרת לגלות את הטעות במהירות.
השיעור מראה שילוב של קריאה מהרשת, ביטוי רגולרי והדפסה בסקריפט אחד קצר.
השיעור הבא בקורס: הגדרת PATH

פרקי ההרצאה: כתיבת Script המגלה כתובת IP חיצונית

  1. 00:00

    מבוא: סקריפט שמגלה את ה-IP החיצוני

  2. 01:00

    בדיקת מבנה ה-HTML של דף ה-IP

  3. 01:40

    בניית ביטוי רגולרי לחילוץ הכתובת

  4. 03:28

    קריאת הדף מהאינטרנט עם urllib

  5. 04:55

    חילוץ הכתובת מהמידע שהתקבל

  6. 05:50

    שימוש ב-findall ו-search במודול re

  7. 08:24

    העברת הסקריפט לקובץ והוספת קלט

תמלול ההרצאה: כתיבת Script המגלה כתובת IP חיצונית

הטקסט המלא של הדקות הראשונות בהרצאה «כתיבת Script המגלה כתובת IP חיצונית» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:03

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

  2. 00:17

    אז סתם מצאתי איזשהו אתר דרך גוגל שמראה את ה-IP החיצוני שלי. אז ה-IP החיצוני שלי הוא 82, 166, 29, 38. בעצם לפני שאני אתחיל לכתוב את הקוד אני אתאר מה אני רוצה לעשות.

  3. 00:32

    מה שאני רוצה לעשות זה לפתוח בעזרת מודול שנקרא urllib לפתוח את הכתובת url של האתר הזה ולעשות ממנה read, בעצם לקרוא אותה. אני אקבל את הקוד html לתוך המשתנה הזה, אחרי זה אני אחלץ משם את ה-IP שלי.

  4. 00:51

    דבר ראשון, לפני שאנחנו בכלל מתחילים לכתוב קוד פייתון, בואו בכלל נראה איך האתר הזה בנוי. אז האתר הזה מכיל your IP address is ואת הכתובת.

  5. 01:02

    מה שאני רוצה בעצם לדעת זה איך זה נראה מבחינת הקוד של ה-HTML עצמו. אז ב-FireFox, אז פשוט לוחצים קליק ימני ואז View Page Source.

  6. 01:12

    פשוט נחפש פה 82. והנה מצאנו את ה-IP שלנו, הוא מוקף בסוגריים מסוג Strong, ואנחנו נשתמש במידע הזה עוד רגע. ושאר המידע פה בעצם לא מעניין אותנו. אז כדי לחלץ מכאן את המידע, יש כמה דרכים, אפשר לנסות למצוא את האינדקס של המילה Strong, ואת האינדקס של Strong עם Backslash, אז לחלץ את המידע באמצע, אבל אנחנו נעשה משהו קצת יותר מתקדם,

  7. 01:42

    נשתמש בביטוי רגולרי. כדי לבנות את הביטוי הרגולרי, נעזר באתר המעולה הזה, נקרא רג'קס 101. זה אתר מאוד מומלץ למי שרוצה לבנות ביטויים רגולריים.

  8. 01:55

    פה בצד ימין נבחר פייתון, פה נכניס את המחרוזת שאותה אנחנו מעוניינים לחפש, ופה אנחנו נחפש לכתוב את הביטוי הרגולרי שלנו.

  9. 02:07

    אני לא אכנס יותר מדי לתחום הביטויים הרגולריים, זה תחום בפני עצמו, אבל בגדול, הביטוי שאני מתאר זה סטרינג כלשהו, שאחריו מכיל טרונג, סוגר משולש, אחריו מכיל מספר כלשהו ונקודה כמה פעמים, ואחריו לא אכפת לנו מה הוא מכיל,

  10. 02:51

    זה בעצם כל מה שמעניין. עכשיו, אני רוצה בעצם לתפוס את הביטוי הזה, אז אני מקיף אותו בסוגריים עגולות. כפי שאתם רואים בצד ימין, אפשר לראות שאנחנו תפסנו את הביטוי הזה, match, זאת אומרת שאנחנו מצאנו את הביטוי הזה, וזה מה שבעצם זה שווה.

  11. 03:09

    חשוב לשים לב שלא תפסנו דברים שלא התכוונו לתפוס. אז זה חלק אחד מהסקריפט, ולאחר מכן הסקריפט, לאחר שהוא קיבל את ה-IP וחילץ אותו מה-HTML, אז הוא יתפיס אותו למסך.

  12. 03:22

    בואו נתחיל לכתוב. דבר ראשון, אנחנו משתמשים במודול של Regular Expression שנקרא RE, ואנחנו משתמשים במודול שנקרא URLLib, מה שמאפשר לנו להתחבר לאתר אינטרנט אז דבר ראשון בוא נראה איך אנחנו קוראים את המידע מהאינטרנט דבר ראשון בוא נשמור את השם של האתר אינטרנט באיזשהו סטרינג נעתיק אותו ונדביק ולאחר מכן נעשה

  13. 04:01

    handler שווה ל-url-lib.urlopen של url בעצם השורה הזאת מה שהיא עושה קיבלנו socket כלומר קיבלנו איזשהו פרוקסי או איזשהו אובייקט שדרכו אפשר לתשאל את הרשת. עכשיו אנחנו רוצים לדעת את הדאטה, אז הדאטה שווה בעצם להאנדלר נקודה read, או אנחנו רוצים לקרוא את כל הדף html מהכתובת הזאת.

  14. 04:35

    אם אני עכשיו ידפיס את דאטה, תוכלו לראות הרבה הרבה דברים לא מובנים, אבל זה בעצם הקוד html של האתר הזה. עכשיו אם אנחנו נחפש פה טוב טוב, אז איפשהו פה מתחבא ה-IP שלנו.

  15. 04:51

    מהי ה-IP? קשה לי לראות את זה בעצמי, אבל אני אוכיח לכם שהוא נמצא פה פשוט 82 in data true כלומר אני לא יודע איפה זה נמצא הנה זה קפץ לי עכשיו 82 166 29 38 זה ה-IP ואת זה אני רוצה בעצם לחלץ מכאן אז איך אני עושה כזה דבר דבר ראשון צריך ליצור ביטוי רגולרי כלומר לקמפל להפוך את הסטרינג את הסטרינג הזה רוצים להפוך

  16. 05:25

    לאובייקט של רגולר אקספריישן שיחלץ לנו אז פה דבר ראשון נשמור את הסטרינג הזה פה באינטרפרטר. זה בעצם סטרינג, לא עשיתי שום דבר, מסובך עדיין.

  17. 05:45

    עכשיו אני רוצה בעצם להפעיל את הרג'קס הזה על הסטרינג. אז יש לנו את המודול re, אני מזכיר לכם שאפשר להשתמש בפונקציה help כדי לקבל את כל ההסברים על re ואיך להשתמש בו.

  18. 06:02

    אנחנו נשתמש בפונקציה שנקראת find all, שהיא מחזירה לנו את כל המקומות שבהם מצאנו משהו. אז נעשה re.FindAll של הפיתוי הרגע. אני רק רוצה לבדוק משהו בנוגע לפונקציה הזאת.

  19. 06:32

    אז FindAll מקבלת משתנה ראשון pattern, משתנה שני string ו-flags. לא נתייחס לפלאגים, כי כרגע זה לא מעניין אותנו. אז אנחנו נעשה FindAll pattern שלנו הוא regex, ואנחנו רוצים לחפש בתוך data, והנה, ממש בקלות קיבלנו ליסט.

  20. 06:57

    קיבלנו list כי קראנו בעצם לפונקציה find all, שמחזירה את כל הדברים שהתאימו לביטוי הרגולרי שלנו. היינו יכולים גם להשתמש ב-search או ב-match, כל אחד מהם יש לו את השימושים שלו.

  21. 07:17

    האמת ב-match לא היינו יכולים להשתמש, היינו יכולים להשתמש ב-search. אם רגע נסתכל על arי.search, נראה מה זה עושה בעצם. אז search הוא פשוט מחזיר את הראשון שהוא מוצא.

  22. 07:31

    כלומר research regex data קיבלנו אובייקט עכשיו אני לא יודע מה יש באובייקט הזה אז אני יכול לעשות לו dir ואז אני רואה שיש לי פה פונקציה שנקראת groups הנה קיבלנו את כל ההתאמות של הביטוי הרגולרי שלנו עכשיו שימו לב כמה זה היה פשוט כל מה שעשיתי פה באמת זה היה לעשות import לשני מודולים לעשות url open כלומר לקרוא את הurl לעשות מתוכו read לתוך משתנה שנקרא data

  23. 08:11

    חידרתי את הביטוי הרגולרי שעשיתי את זה מאוד בקלות באתר אינטרנט רג'קס 101 ולאחר מכן השתמשתי בביטוי הרגולרי ב-Find All או גם ב-Search כדי לחלץ את התוצאה והנה יש לנו סקריפט שממש בקצרה יכול להריץ אותו על כל מכונה והיא תגיד לי את ה-IP החיצוני של אותה מכונה.

  24. 08:33

    בואו עכשיו נעביר את הדבר הזה ל-NotePad לסקריפט חיצוני אז אני פשוט אעתיק את זה ממש ממש מהר. יש לנו אימפורט RE, אימפורט של URL חליף.

  25. 08:52

    לאחר מכן, בואו נעשה את הסקיפ הזה קצת יותר מתוחכם. נעשה URL שווה ל-pro input, שזאת פונקציה שאומרת למשתמש את מה שאני עכשיו עומד לכתוב, ומה שהמשתמש מקיש נכנס לתוך המשתנה URL, אז Enter URL.

  26. 09:20

    זה סתם כדי להראות את הפונקציה, בעצם ה-URL חייב להיות ה-URL של האתר שאותו פרסרנו. לאחר מכן נעשה urllib.urlopen של url.read. נצרוך קצת זמן, דאטה.

  27. 09:51

    ונעשה regex שווה ונעתיק את הביטוי הרגולרי

לקורס המלא: קורס פייתון אונליין למתחילים

ההרצאה הקודמת: Mutable - חלק 2

ההרצאה הבאה: הגדרת PATH

הרצאות קשורות מקורסים אחרים

  • כתיבת SCRIPT ב-SQL
  • שינוי כתובת IP חיצונית - לכתובת דינמית - DHCP
  • לינוקס Script - חלק 1
  • FIRST YML SCRIPT

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת JAVA - קורס ג'אווה למתחילים
  • קורס PHP - פרויקט מעשי