Como obter o endereço IP atribuído à VM em execução em segundo plano?


27

Eu corro minha instância do Ubuntu fora do Virtual Box em segundo plano usando o seguinte comando:

VBoxManage startvm ${VM_NAME} --type headless

A principal diferença entre isso e executá-lo através da GUI é que, quando estou na GUI após o início, posso verificar ifconfigqual é o endereço IP para que possa sshacessá-lo do meu terminal no host e obviamente pode ' Não faça isso em segundo plano.

Supondo uma atribuição dinâmica de endereços IP na rede, existe uma maneira de extrair o IP atribuído à instância recém-criada para fins de ssh OU existe uma maneira de fazer ssh nela sem conhecer o IP (por exemplo, através de uma porta backdoor no host )?

Respostas:


16

Você pode usar o comando VBoxManage para extrair o endereço IP, conforme mostrado nesta postagem do fórum em virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

A menos que você tenha boas razões, no entanto, convém considerar atribuir um endereço IP estático à sua vm convidada. Isso é possível mesmo que você provavelmente esteja usando DHCP. Basta escolher um endereço IP fora do intervalo que o servidor DHCP aloca.


7
esse comando não retornar o endereço IP
amphibient

3
Você precisa ter as adições de convidado instaladas para que isso funcione.
heavyd

Ok, então, como você faz isso quando as adições de convidados não estão instaladas?
precisa saber é o seguinte

1
Ou: VBoxManage guestproperty get <vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP".
Todd Walton

9

Antes de tudo, verifique se você instalou o VirtualBox Extension Pack ou, caso contrário, não o instale.

Por exemplo (para Ubuntu)

> wget http://download.virtualbox.org/virtualbox/4.2.12/Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack
> sudo VBoxManage extpack install ./Oracle_VM_VirtualBox_Extension_Pack-4.2.12-84980.vbox-extpack

ou de

https://www.virtualbox.org/wiki/Downloads

Depois disso, você pode obter o IP da VM

VBoxManage guestproperty enumerate <_name_of_VM_> | grep IP | grep -o -w -P -e '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'

3
ainda does not exibir o IP para mim
Josh Nankin

@JoshNankin Você resolveu isso?
user3933607

@ JoshNankin no que a propriedade guest do VBoxManage enumera <_name_of_VM_> | grep IP dá a você?
weivall

para OSX - a propriedade guest do VBoxManage enumera 4ab1029f-23ff-4c5c-b4bd-3b6d68aa7cc0 | IP grep | grep -oE "\ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b" Regex para IP Eu peguei stackoverflow.com/questions/11482951/…
weivall

5

Eu sei que estou atrasado para esta festa, mas isso funcionará com o VirtualBox 5.0.6.

Isso usa o VBoxManage para obter uma lista de máquinas virtuais em execução, consulta suas propriedades em um loop e exibe os endereços IP de uma maneira bonita.

#!/bin/bash

for f in $(VBoxManage list runningvms | awk -F\" '{print $2}'); do
      echo "$f:"
      VBoxManage guestproperty enumerate "$f" | grep IP
    done

1

Você pode olhar para a tabela DHCP no roteador, antes da inicialização e depois e compará-las. Se o roteador exibir o nome do computador, isso facilita muito, é claro. Talvez essa não seja uma solução sofisticada, mas funciona.

A maioria dos roteadores atribui endereços dinâmicos, mas continua dando a uma máquina ou VM (o roteador não sabe a diferença) o mesmo IP na maior parte do tempo. Se você copiar uma VM no Virtualbox, poderá optar por definir um novo endereço MAC, que é a maneira como o roteador identifica a VM.


0

Eu tive uma tarefa semelhante em python. Provavelmente seria útil.

pip install pyvbox

e depois em python:

import virtualbox

vbox = virtualbox.VirtualBox()
vm = vbox.find_machine('running_vb_machine_name')
res = vm.enumerate_guest_properties('/VirtualBox/GuestInfo/Net/0/V4/IP')
ip = res[1][0]
print ip

0

Usei a opção controlvm para iniciar um rastreamento de pacotes no nic ativo do convidado e abri o arquivo local com o wireshark. O endereço IP dos convidados estará lá.

VBoxManage controlvm <vm-name> nictracefile<1-N> /full/path/to/file
VBoxManage controlvm <vm-name> nictrace<1-N> on

wireshark /full/path/file

Não se esqueça de desativar o rastreamento ao concluir.

VBoxManage controlvm <vm-name> nictrace<1-N> off

-4
VMNAME="..."; # save ID of VM  in VMNAME variable
vboxmanage guestproperty enumerate $VM_NAME|grep IP|cut -f2 -d,|cut -f2 -d:

5
Estamos procurando respostas substanciais que forneçam alguma explicação e contexto. Por favor, não dê apenas uma resposta de código de duas linhas; explique por que sua resposta está correta, idealmente com citações. As respostas que não incluem explicações podem ser removidas. Mas também, sua resposta é equivalente a respostas anteriores, exceto por diferenças triviais de formatação. Não poste uma resposta, a menos que você realmente tenha algo novo para contribuir.
G-Man Diz 'Reinstate Monica'

:). u'r bem-vindo .. não em todos
Abdennour Toumi

@ G-Man: se você tiver milhares de contas, faça o login e vote em menos. Infelizmente, não vou excluir a resposta.
Abdennour TOUMI
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.