Existe uma maneira de “redirecionar” um clique em um URL em um convidado do VirtualBox para abrir no navegador do sistema operacional host?

7

Estou usando o VirtualBox OSE no Ubuntu 10.04.

Eu tenho uma VM guest do Windows 7 que eu uso quase que exclusivamente para o MS Outlook acessar minha caixa de correio do Exchange. Se eu clicar em um URL no Outlook, obviamente, ele abre no IE na máquina virtual convidada, existe alguma maneira de fazer um redirecionamento de algum tipo?

Se eu clicar em um URL dentro da VM, quero que ele seja carregado no meu navegador padrão no host do Ubuntu.

    
por ThatGraemeGuy 12.05.2010 / 10:03

6 respostas

2

Se houvesse tal forma, seria uma enorme falha de segurança.

O máximo que você pode fazer é usar a área de transferência compartilhada: com as adições de convidado instaladas, a área de transferência do seu sistema operacional convidado pode ser compartilhada com seu sistema operacional host.

    
por 12.05.2010 / 10:29
5

Teoricamente sim. Você poderia ter um manipulador de stub no guest enviando uma mensagem para um daemon em execução no host que realmente invoca o aplicativo adequado. Eu nunca vi tal configuração eu mesmo.

    
por 12.05.2010 / 10:29
2

Eu tinha o mesmo idéia como Ignacio Vazquez-Abrams e eu implementei isso.

Portanto, a primeira parte disso é um servidor HTTP que ouve solicitações na máquina em que você deseja abrir o navegador. Em uma solicitação recebida, ela abre (em um navegador) a URL fornecida como um argumento de uma solicitação POST.

Escolha um:

Você deve adicionar esse script à inicialização, ele deve ser executado em segundo plano.

A segunda parte é algo que invoca o pedido.

Escolha um:

Você deve designar esse script como seu navegador padrão. Como fazer isso é ... uma questão separada. Você pode pesquisar por algo como "janelas configuradas como executáveis como navegador padrão" .

Ele também pode ser usado como uma ferramenta de linha de comando: ./open_url.py 'http://google.com/'

Os scripts Python devem funcionar em todos os principais sistemas com qualquer versão razoavelmente recente do Python (eu suspeito 2.6+, 3.1 +).

No Windows, se você não quiser que um script Python seja executado em uma janela de comando, altere sua extensão para .pyw . Use o Gerenciador de Tarefas se quiser pará-lo (procure por pythonw.exe ).

O adaptador de rede do VirtualBox deve ser definido como NAT (configuração padrão). Mais sobre o endereço IP aqui . A escolha da porta é arbitrária, sinta-se à vontade para mudar 1337 para outra coisa em qualquer lugar.

O servidor é seguro porque escuta apenas as conexões do host local. O VirtualBox faz com que funcione de alguma forma. Mas se você quiser que isso funcione remotamente, especifique o endereço IP de escuta como '0.0.0.0' ou '' em vez de 'localhost' .

    
por 02.10.2015 / 12:02
1

Se você usa o Google Chrome como navegador nos dois sistemas operacionais, o navegador push pode ajudar: link

É basicamente uma extensão que permite enviar guias de um dispositivo para outro, atualmente suportando dispositivos Chrome e iOS. Na sua situação, você clicaria no link no Outlook, ele abriria no Chrome na VM, você clicaria no ícone do navegador de envio e a guia abriria no Chrome na sua máquina do Ubuntu.

    
por 06.06.2011 / 17:25
0

Eu estou na mesma situação. Aqui está o meu melhor que nada solução:

Eu criei o script ~/bin/pburl que contém:

#!/bin/bash

set -eu

exec gnome-open $(xclip -out -selection clipboard)

# EOF

O que isto faz é pegar qualquer URL que você tenha em sua área de transferência e abri-lo como um URL usando o manipulador de URL padrão do gnome (Chrome no meu caso).

Meu uso é:

  1. No Outlook (no Convidado) eu "copio hiperlink".
  2. clico na área de trabalho ou em uma janela que não é da VM.
  3. Pressiono o espaço de controle que lança Sinapse e digita pburl .

Presto! O URL é aberto.

Não é tão bom quanto apenas clicar, mas encurta toda a rotina copiar-abrir-navegador-colar.

    
por 06.06.2011 / 16:53
0

Eu não tenho 50 pontos, então não posso comentar no post de Oleh Pyrpin.

Eu tenho algumas melhorias:

  1. Oleh e eu nos correspondemos em particular e ele forneceu informações sobre como configurar uma unidade de usuário do systemd. Isso pode ser usado para executar o script na inicialização dentro da sessão do usuário (para que ele veja o navegador do usuário). As instruções estão aqui: [ link

  2. Fiz algumas melhorias no código do servidor Python. Estou executando o Host Only Networking no VirtualBox e usando o iptables para rotear coisas certin fora da VM. Descobri que o script python do servidor iria falhar se a rede do VirtualBox não estivesse funcionando. Minha modificação verifica se a rede está pronta e se não dorme por 10 segundos e tenta novamente.

    #!/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)   
    
  3. Eu implementei o lado do convidado do Windows um pouco diferente. Eu tenho uma porta do windows de curl (fonte desconhecida, desculpe). Eu imaginei que eu usaria isso em vez de instalar o Python no sistema Windows. Se você não tiver o curl, poderá usar o script python do cliente fornecido no primeiro link.

Eu criei um arquivo em lote url_redirect_client.bat contendo:

   @curl --data-urlencode "url=%~1" http://192.168.10.1:1337/
   @exit
  1. Eu fiz o arquivo de lote acima o navegador web padrão do Windows e o manipulador de .htm e .html com esta chave de registro:

    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]
    

Eu tenho executado isso por alguns dias e parece funcionar bem. Eu me deparei com um problema com uma URL extremamente longa da Amazon, isso falhou. Possivelmente, usar o script python do lado do cliente dos autores originais não terá esse problema ou talvez precise de mais alguém para construir mais sobre isso e melhorá-lo.

    
por 19.04.2018 / 06:02