Theoretisch ja. Sie könnten einen Stub-Handler innerhalb des Gasts haben, der eine Nachricht an einen Daemon sendet, der auf dem Host ausgeführt wird, wodurch tatsächlich die richtige Anwendung aufgerufen wird. Ich habe selbst noch nie ein solches Setup gesehen.
Gibt es eine Möglichkeit, einen Klick auf eine URL in einem VirtualBox-Gast "umzuleiten", um ihn im Host-OS-Browser zu öffnen?
Ich verwende VirtualBox OSE auf Ubuntu 10.04.
Ich habe eine Windows 7-Gast-VM, die ich fast ausschließlich für MS Outlook verwende, um auf mein Exchange-Postfach zuzugreifen. Wenn ich in Outlook eine URL in Outlook anklicke, wird sie offensichtlich in IE in der Gast-VM geöffnet. Gibt es eine Möglichkeit, eine Art Weiterleitung durchführen zu lassen?
Wenn ich auf eine URL in der VM klicke, möchte ich, dass sie in meinen Standardbrowser im Ubuntu-Host geladen wird.
6 Antworten auf die Frage
- Beliebte
- Neu
- Mit Kommentaren
- Aktiv
Wenn es einen solchen Weg gäbe, wäre das eine enorme Sicherheitslücke.
Sie können am besten die gemeinsame Zwischenablage verwenden: Wenn Guest-Zusätze installiert sind, kann die Zwischenablage Ihres Gastbetriebssystems mit Ihrem Hostbetriebssystem gemeinsam genutzt werden.
Ich hatte die gleiche Idee wie Ignacio Vazquez-Abrams und habe sie umgesetzt.
Der erste Teil davon ist ein HTTP-Server, der Anfragen auf dem Computer abhört, auf dem Sie den Browser öffnen möchten. Bei einer eingehenden Anforderung wird (in einem Browser) die als Argument einer POST-Anforderung angegebene URL geöffnet.
Wähle eins:
- Python- Skript, keine Abhängigkeiten: browser_daemon.py
- Python- Skript, erfordert Flask : browser_daemon_flask.py
Sie sollten dieses Skript zum Start hinzufügen, es soll im Hintergrund laufen.
Der zweite Teil ist etwas, das die Anfrage aufruft.
Wähle eins:
- Shell- Skript erfordert curl : open_url.sh
- Python- Skript, keine Abhängigkeiten: open_url.py
Sie sollten dieses Skript als Standardbrowser festlegen. Wie das geht, ist ... eine gesonderte Frage. Sie können nach etwas suchen, wie z. B. "Windows als Standardbrowser" .
Es kann auch als Befehlszeilenwerkzeug verwendet werden: ./open_url.py 'http://google.com/'
Die Python-Skripts sollten auf allen gängigen Systemen mit einer relativ aktuellen Python-Version funktionieren (ich vermute, dass 2.6+, 3.1+).
Wenn Sie unter Windows nicht möchten, dass ein Python-Skript in einem Befehlsfenster ausgeführt wird, sollten Sie die Erweiterung in ändern .pyw
. Verwenden Sie den Task-Manager, wenn Sie ihn stoppen möchten (suchen Sie nach pythonw.exe ).
Der VirtualBox-Netzwerkadapter sollte auf NAT eingestellt sein (Standardeinstellung). Mehr zur IP-Adresse hier . Die Wahl des Hafens ist beliebig. Sie können den 1337 überall auf etwas anderes ändern .
Der Server ist sicher, da er nur Verbindungen von localhost überwacht. VirtualBox macht es irgendwie möglich. Wenn Sie jedoch möchten, dass dies remote funktioniert, geben Sie als '0.0.0.0'
oder ''
anstelle von die abhörende IP-Adresse an 'localhost'
.
Wenn Sie Google Chrome als Browser für beide Betriebssysteme verwenden, kann der Push-Browser hilfreich sein: http://pushbrowserapp.com/
Es ist im Grunde eine Erweiterung, mit der Sie Registerkarten von einem Gerät zum anderen senden können und derzeit Chrome- und iOS-Geräte unterstützen. In Ihrer Situation würden Sie auf den Link in Outlook klicken, er wurde in Chrome in der VM geöffnet, Sie klicken auf das Push-Browsersymbol und die Registerkarte wird in Chrome auf Ihrem Ubuntu-Computer geöffnet.
Ich bin in der gleichen Situation. Hier ist meine bessere als nichts Lösung:
Ich habe das Skript erstellt, das Folgendes ~/bin/pburl
enthält:
#!/bin/bash set -eu exec gnome-open $(xclip -out -selection clipboard) # EOF
Was dies bedeutet, nimmt jede URL, die Sie in Ihrer Zwischenablage haben, und öffnet sie als URL, indem Sie den Standard-URL-Handler von gnome (in meinem Fall Chrome) verwenden.
Meine Verwendung ist:
- In Outlook (auf dem Guest) "kopiere ich Hyperlink".
- Ich klicke auf den Desktop oder ein Nicht-VM-Fenster.
- Ich drücke Control-Space, der Synapse und Typ startet
pburl
.
Presto! Die URL wird geöffnet.
Es ist nicht so gut wie das Klicken, aber es verkürzt die gesamte Routine zum Kopieren und Öffnen des Browsers.
Ich habe keine 50 Punkte, daher kann ich unter dem Beitrag von Oleh Pyrpin nichts kommentieren.
Ich habe einige Verbesserungen:
Oleh und ich korrespondierten privat und er lieferte Informationen zum Einrichten einer systemd-Benutzereinheit. Dies kann verwendet werden, um das Skript beim Booten in der Benutzersitzung auszuführen (damit der Browser des Benutzers angezeigt wird). Anweisungen hierzu finden Sie hier: [ https://gist.github.com/oprypin/0f0c3479ab53e00988b52919e5d7c144 ] [1 ]
Ich habe einige Verbesserungen am Python-Servercode vorgenommen. Ich verwende Host Only Networking in VirtualBox und verwende iptables, um Zertifizierungsaufgaben aus der VM herauszuleiten. Ich fand heraus, dass das Server-Python-Skript abstürzt, wenn das Netzwerk von VirtualBox nicht aktiv ist. Meine Änderung prüft, ob das Netzwerk bereit ist und 10 Sekunden lang nicht in den Ruhezustand versetzt wird, und versucht es erneut.
#!/usr/bin/env python # Credit to... Oleh Pyrpin for all of the cool stuff here. # See https://superuser.com/questions/140234/is-there-a-way-to-redirect-a-click-on-a-url-in-a-virtualbox-guest-to-open-in-t # # My improvements: 1. Wait for VirtualBox network to be available # 2. Check for available port so we can fail gracefully if something (probably another instance of us) is already listening on the port # markd89 import webbrowser, time, socket, os.path, sys try: from urllib.parse import parse_qs except ImportError: from urlparse import parse_qs def application(environ, start_response): try: if environ['REQUEST_METHOD'] == 'POST': try: length = int(environ['CONTENT_LENGTH']) except KeyError: length = None post = parse_qs(environ['wsgi.input'].read(length).decode('utf-8')) [url] = post['url'] webbrowser.open(url, new=2, autoraise=True) except Exception as e: print(repr(e)) start_response('200 OK', [('Content-Type', 'text/html; charset=utf-8')]) return [] if __name__ == '__main__': while True: #Loop every 10 seconds until we're able to start the Web Server if os.path.isfile('/sys/class/net/vboxnet1/operstate'): print("Debug: Path exists.") if 'up' in open('/sys/class/net/vboxnet1/operstate').read(): # Adjust this for the name of your vbox network print("Debug: vboxnet1 is up. Checking if port is available.") sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(2) #2 Second Timeout result = sock.connect_ex(('192.168.10.1',1337)) # Adjust this for the server and port you are using. if result == 0: print ("Debug: Port already in use. Maybe another instance of this script is running?") sys.exit(1) else: print ("Debug: Port available, starting web server.") from wsgiref.simple_server import make_server httpd = make_server('192.168.10.1', 1337, application) # This should match the server and port above, doh! httpd.serve_forever() else: print("Debug: vboxnet1 is not up yet.") time.sleep(10)
Ich habe die Windows-Gastseite etwas anders implementiert. Ich habe einen Windows-Port von curl (Quelle unbekannt, sorry). Ich dachte, ich würde das verwenden, anstatt Python auf dem Windows-System zu installieren. Wenn Sie kein curl haben, können Sie das im ersten Link enthaltene Client-Python-Skript verwenden.
Ich habe eine Batch-Datei url_redirect_client.bat erstellt, die Folgendes enthält:
@curl --data-urlencode "url=%~1" http://192.168.10.1:1337/ @exit
Ich habe die obige Batchdatei zum Standard-Windows-Webbrowser und -Handler von .htm und .html mit diesem Registrierungsschlüssel gemacht:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Classes\.CSS] @="urlredirectclient" [HKEY_CURRENT_USER\Software\Classes\.HTM] @="urlredirectclient" [HKEY_CURRENT_USER\Software\Classes\.HTML] @="urlredirectclient" [HKEY_CURRENT_USER\Software\Classes\urlredirectclient\shell\open\command] @="c:\\temp\\url_redirect_client.bat \"%1\"" [HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice] "Progid"="urlredirectclient" [HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice] "Progid"="urlredirectclient" [-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.css] [-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.htm] [-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html]
Ich habe das seit ein paar Tagen laufen lassen und es scheint gut zu funktionieren. Ich bin auf eine Ausgabe mit einer extrem langen URL von Amazon gestoßen, die fehlgeschlagen ist. Bei der Verwendung des clientseitigen Python-Skripts der ursprünglichen Autoren ist dieses Problem möglicherweise nicht vorhanden, oder es muss möglicherweise ein anderer Benutzer darauf aufbauen und es verbessern.
Verwandte Probleme
-
6
Virtualbox, VMware, KVM oder andere für Ubuntu-Virtualisierung?
-
13
Wie bekomme ich eine neue Browsersitzung, wenn Sie in Firefox / Chrome eine neue Registerkarte oder...
-
5
Wie entferne ich das Flash-Protokoll / den Datenschutzpfad automatisch? Oder stoppen Sie Flash, um e...
-
4
Ist das Bestehen des Acid3-Tests wichtig?
-
3
OS X Default Browser Zurücksetzen auf Safari
-
5
Wie kann ich VirtualBox mit zwei Monitoren gut spielen lassen?
-
1
Kann ich Plug-Ins nur für einen Browser installieren?
-
3
Problem, bei dem WLAN für Skype funktioniert, aber nicht für einen Browser?
-
5
Mit Cmd + 1..9 zwischen den Registerkarten in Safari wechseln?
-
3
Fallstricke von Windows XP Virtual Machines