Bild von Bild von Captive-Portal-Seite speichern. Schließen Sie das Portal-Pop-up und die WLAN-Verbindung, ohne das BildPython

Python-Programme
Anonymous
 Bild von Bild von Captive-Portal-Seite speichern. Schließen Sie das Portal-Pop-up und die WLAN-Verbindung, ohne das Bild

Post by Anonymous »

Hintergrund < /h2>
Ich entwickle eine physikalische Python-basierte Anwendung auf einem Raspberry Pi 4 mit einer grundlegenden Benutzeroberfläche, an dessen Ende ich dem Benutzer ein Foto zum Herunterladen präsentiere. Dazu wird ein QR -Code vorgestellt, der den Benutzer auf einen WLAN bringt, den der PI hostet. Eine Captive-Portal-Seite zeigt das Bild (wenn das Captive-Portal tatsächlich auftaucht), das dann mit einem Langdruck gespeichert werden kann. Ich mache es so, anstatt die Datei direkt als Download zu bedienen, da das Foto in der Fotorolle des Benutzers und - zumindest auf iOS - als Download ein Bild serviert, speichert es in Dateien stattdessen. /> Auf einem iOS-Gerät (noch nicht auf Android getestet), wenn das in Captive-Portal angezeigte Fenster angezeigt wird und der Benutzer Langzeitprozesse die Option zum Speichern des Bildes auswählt: < /p>

Das Captive-Portal-Fenster verschwindet. gespeichert < /li>
< /ol>
Wenn der Benutzer die Schaltfläche "Abbrechen" oben rechts in der Benutzeroberfläche der Captive -Portal auswählt, wird das Netzwerk ohne Internet fortgesetzt. "Dann lädt die Seite absichtlich absichtlich in einem Browser. Das Recht der Benutzeroberfläche ändert sich zu so etwas wie "OK" oder "Fertig". Ich weiß aber auch, dass Captive -Portal -Seiten das Senden und Empfangen von HTTP -Anfragen/-antworten und die Regisse auf neue Seiten usw. unterstützen, bevor das Gerät das eigentliche Internet erreicht. Ich bin mir also nicht sicher, warum dies ein Problem ist. Das heißt, ich habe keine Ahnung, was ich tue. Ich hoffe, jemand hier tut es und kann mich darüber beraten, wie ich mein Ziel erreicht habe oder warum es nicht möglich ist. Ich werde es beheben.

Code: Select all

#!/bin/bash

# Stop existing services
sudo systemctl stop hostapd.service
sudo systemctl stop dnsmasq.service

# Clear existing interface configuration
sudo ip addr flush dev wlan0
sudo ip link set wlan0 down

# Configure the interface
sudo ip addr add 192.168.4.1/24 dev wlan0
sudo ip link set wlan0 up

# Update dnsmasq configuration for captive portal
sudo tee /etc/dnsmasq.conf > /dev/null  /dev/null

echo "WiFi hotspot configured with captive portal DNS interception"
echo "All DNS queries will be redirected to 192.168.4.1"
echo "HTTP and HTTPS traffic will be redirected to port 5000"
Hier ist, wie ich meine URL-Regeln definiere (ich habe eine Klasse, die ich definiert habe, um dies tatsächlich zu tun, damit ich sie als sekundärer Thread ausführen kann. Daher alle Selbst s):
>>>>

Code: Select all

# Main content endpoints
self._app.add_url_rule('/', endpoint='index', view_func=self._image_delivery)
self._app.add_url_rule(
f'/{ENDPOINT_FINAL_PRODUCT_UPDATE}', methods=['POST'], view_func=self._update_deliverable
)

# Captive portal detection endpoints - ALL redirect to main page to show content
self._app.add_url_rule('/hotspot-detect.html', endpoint='hotspot_detect', view_func=self._redirect_to_main)
self._app.add_url_rule('/library/test/success.html', endpoint='library_test_success',
view_func=self._redirect_to_main)
self._app.add_url_rule('/canonical.html', endpoint='canonical', view_func=self._redirect_to_main)
self._app.add_url_rule('/kindle-wifi/wifistub.html', endpoint='kindle', view_func=self._redirect_to_main)

# Keep these as status responses since they're not typically used for initial captive portal detection
self._app.add_url_rule('/generate_204', endpoint='generate_204', view_func=self._generate_204)
self._app.add_url_rule('/gen_204', endpoint='gen_204', view_func=self._generate_204)
self._app.add_url_rule('/ncsi.txt', endpoint='ncsi', view_func=self._ncsi_response)
self._app.add_url_rule('/connecttest.txt', endpoint='connecttest', view_func=self._connecttest_response)
self._app.add_url_rule('/success.txt', endpoint='success_txt', view_func=self._success_txt)

# Catch-all route for any unhandled requests - redirect to main page
self._app.add_url_rule('/', endpoint='catch_all', view_func=self._catch_all_redirect)
< /code>
und die relevanten Ansichtsfunktionen: < /p>
def _redirect_to_main(self):
"""Redirects captive portal detection requests to main page so users see content"""
self._logger.debug("Captive portal detection endpoint called - redirecting to main page")
# Return a redirect response to the main page
from flask import redirect, url_for
return redirect(url_for('index'))

def _image_delivery(self):
"""Serves the page where the final product can be downloaded"""
self._logger.debug(f"'image_delivery' endpoint called. deliverable_filename: {self.deliverable_filename}")
return render_template('index.html', filename=self.deliverable_filename)

def _catch_all_redirect(self, path):
"""Redirects any unhandled requests to the main captive portal page"""
self._logger.debug(f"Catch-all redirect called for path: {path}")
# For any unrecognized path, serve the main page
return self._image_delivery()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post