אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » מדריכים » מיקרו בקרים » בניית רשת אלחוטית עם ESP32 ופייתון

בניית רשת אלחוטית עם ESP32 ופייתון

רן בר-זיק יולי 16, 2023 8:51 am 3 תגובות

בניית Access point עם מיקרובקר ופייתון במספר שורות קוד וגם תעלולים מעניינים שאפשר לעשות עם זה.

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

כרטיס הרשת של ESP32 מאפשר לנו להתחבר לכל WiFi בלי בעיה אבל גם ליצור רשת אלחוטית עם איזה SSID שאנו רוצים וכל זה עם סקריפט פייתון פשוט. למשל, אם אני רוצה ליצור רשת אלחוטית פשוטה – אני צריך להריץ את הקוד הזה שמשתמש ב-network module כדי לתקשר עם כרטיס הרשת ולפתוח Access point. אם תכניסו את הקוד הזה ל-Thonny הנאמן שלכם ותצרבו אותו ל-ESP32 שלכם, תוכלו לראות מייד רשת כזו.

import network

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='MyESP32AP')
ap.config(authmode=network.AUTH_WPA_WPA2_PSK, password='myPassword')
ap.ifconfig(('10.0.0.1', '255.255.255.0', '10.0.0.1', '10.0.0.1'))

print('Network established:', ap.ifconfig())

אני חושב שבאמת הקוד פשוט ביותר וקל להבנה. אולי השורה הזו זקוקה להסבר קל

ap.ifconfig(('10.0.0.1', '255.255.255.0', '10.0.0.1', '10.0.0.1'))

בגדול היא מגדירה את טווח כתובת ה-IP של מי שמתחבר אל הרשת – מ 10.0.0.1 ואת הכתובת של ה-ESP32.

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

רשת אלחוטית בשם MyESP32AP

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

אתר פנימי של ESP32 שמראה את כתובת ה-IP של מי שהתחבר לכתובתו: 10.0.0.1
import network
import socket

ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='MyESP32AP')
ap.config(authmode=network.AUTH_WPA_WPA2_PSK, password='myPassword')
ap.ifconfig(('10.0.0.1', '255.255.255.0', '10.0.0.1', '10.0.0.1'))

webpage = """
<!DOCTYPE html>
<html>
<head>
<title>ESP32 Access Point</title>
</head>
<body>
<h1>Welcome to ESP32 Access Point!</h1>
<p>Your IP address is {}.</p>
</body>
</html>
"""

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
    conn, addr = s.accept()
    request = conn.recv(1024)
    response = webpage.format(addr[0])
    conn.send('HTTP/1.1 200 OK\n')
    conn.send('Content-Type: text/html\n')
    conn.send('Connection: close\n\n')
    conn.sendall(response)
    conn.close()

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

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

משפט ותיק אומר: ״Home is where your WiFi is״ – ואכן, ביתו של אדם הוא מבצרו ובמבצר יש את רשת ה-WiFi הביתית שלנו שאליה אנו מתחברים אוטומטית. איך הטלפון שלנו או הלפטופ מזהה את הרשת? לפי השם. כמובן שאנחנו בד״כ לא מתחברים רק לרשת הביתית שלנו אלא לרשתות אחרות – המרכזית היא זו של נמל התעופה בן גוריון, אבל גם זו של הרכבת, בתי קפה פופולריים (ארומה, קפהקפה ועוד מקומות שמשמשים לעבודה).

מה יקרה אם אני אצור רשת אלחוטית שיש לה שם כמו נמל התעופה ובלי סיסמה? מה שיקרה הוא שטלפונים שזוכרים את השם, בהנחה והם נמצאים במקום בלי רשת אחרת מוכרת, ינסו להתחבר אליה. הם יתנתקו כמובן אם אין חיבור אינטרנט תקין (בחלק מהטלפונים) אבל חיבור יהיה! ואם יש חיבור… אפשר לתעד את מי שהתחבר או יותר נכון את ה mac address (הכתובת הפיזית) של כרטיס הרשת שלו!

רשת אלחוטית מזויפת של נמל התעופה בביתי.

עושים את זה עם קוד הפייתון הזה:

import network
import time
import ubinascii

# Setup the Access Point
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid='WIFI_BEN_GURION_AIRPORT')  # No password

# Access Point IP, Subnet
ap.ifconfig(('192.168.4.1', '255.255.255.0', '192.168.4.1', '8.8.8.8'))

# Keep track of MAC addresses that tried to connect
logged_mac_addresses = set()

while True:
    # Get list of connected stations
    stations = ap.status('stations')
    
    # Loop through all connected stations
    for station in stations:
        mac_address = ubinascii.hexlify(station[0], ':').decode()
        if mac_address not in logged_mac_addresses:
            logged_mac_addresses.add(mac_address)
            print("New station connected:", mac_address)
    
    # Sleep for 5 seconds
    time.sleep(5)

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

זהו. עד כאן מאמר קצר שלפי דעתי יעשה לכם חשק לתעלולים כיפיים 🙂

המאמר הבא הוא יותר מעשי – בניית WiFi Extender והדגמה גם על איך צורבים קושחה יעודית (עם מק)

אם אין לכם מק/לינוקס – אולי כדאי לדלג קדימה אל הפוסט של לחבר ציוד אל ESP32 ונתחיל עם LED.

esp32 Python

3 תגובות

  1. חזי הגב יולי 16, 2023 בשעה 10:11 am

    לגבי לוג ה MAC Address , לפחות ב android בגרסאות האחרונות , ברירת מחדל המכשיר מתחבר עם MAC רנדומלי לכל רשת חדשה, ככה שהמעקב לא יהיה שווה הרבה.

  2. אבי הגב יולי 16, 2023 בשעה 8:29 pm

    היי, איפה הוידאו של ההרצאה בפייקון?
    אם שרדתי את הבדיחה הראשונה אני מניח שאשרוד את הרוב.

  3. ג'קי הגב יולי 19, 2023 בשעה 1:53 pm

    2 שאלות:
    1. האם יש קופסאות זיווד בדומה לרספברי פאי?
    2. האם גם אפשר לקרוא מהזכרון של המכשיר את מה שיש שם? כי אם כן בעייתי לאחסן סיסמאות בקובץ טקסטואלי של פייתון

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

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

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

    הפרויקטים שלי בגיטהאב

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

גלילה לראש העמוד