Comment obtenir l'adresse IP attribuée à la VM en arrière-plan?

27

J'exécute mon instance Ubuntu depuis Virtual Box en arrière-plan à l'aide de la commande suivante:

VBoxManage startvm ${VM_NAME} --type headless

La principale différence entre cela et son exécution via l'interface graphique est que, lorsque je suis dans l'interface graphique après son démarrage, je peux vérifier ifconfigquelle est l'adresse IP afin que je puisse y sshentrer depuis mon terminal sur l'hôte et, évidemment , je peux '' t faire cela en arrière-plan.

En supposant une attribution dynamique des adresses IP sur le réseau, existe-t-il un moyen d'extraire l'adresse IP attribuée à l'instance nouvellement créée à des fins ssh OU y a-t-il un moyen de s'y connecter sans connaître l'IP (par exemple via un port de porte dérobée sur l'hôte) )?

amphibient
la source

Réponses:

16

Vous pouvez utiliser la commande VBoxManage pour extraire l'adresse IP, comme indiqué dans ce message de forum sur virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Sauf si vous avez de très bonnes raisons, cependant, vous voudrez sérieusement envisager d'attribuer une adresse IP statique à votre invité VM. Cela est possible même si vous utilisez probablement DHCP. Choisissez simplement une adresse IP en dehors de la plage que votre serveur DHCP alloue.

ChrisInEdmonton
la source
7
cette commande n'a pas renvoyé l'adresse IP
amphibient
3
Vous devez avoir installé les compléments invité pour que cela fonctionne.
Heavyd
Ok alors, comment faites-vous cela lorsque les ajouts d'invités ne sont pas installés?
code_dredd
1
Ou: VBoxManage guestproperty get <vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP".
Todd Walton du
9

Tout d'abord, assurez-vous d'avoir installé VirtualBox Extension Pack ou installez-le sinon.

Par exemple (pour 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

Après cela, vous pouvez obtenir l'IP de 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}'
weivall
la source
3
n'affiche toujours pas l'IP pour moi
Josh Nankin
@JoshNankin Avez-vous résolu cela?
user3933607
@JoshNankin ce que VBoxManage guestproperty énumère <_name_of_VM_> | grep IP vous donne?
weivall
pour OSX - VBoxManage guestproperty énumérer 4ab1029f-23ff-4c5c-b4bd-3b6d68aa7cc0 | grep IP | grep -oE "\ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b" Regex pour IP J'ai pris stackoverflow.com/questions/11482951/…
weivall
5

Je sais que je suis en retard à cette fête, mais cela fonctionnera avec VirtualBox 5.0.6.

Cela utilise VBoxManage pour récupérer une liste de machines virtuelles en cours d'exécution, interroge leurs propriétés dans une boucle et affiche les adresses IP d'une manière jolie.

#!/bin/bash

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

Vous pouvez consulter la table DHCP dans le routeur, avant le démarrage et après et les comparer. Si le routeur affiche le nom de l'ordinateur, cela le rend bien sûr beaucoup plus facile. Ce n'est peut-être pas une solution sophistiquée, mais cela fonctionne.

La plupart des routeurs attribuent des adresses dynamiques, mais ils continuent de donner à une machine ou une machine virtuelle (le routeur ne connaît pas la différence) la même IP la plupart du temps. Si vous copiez une VM dans Virtualbox, vous pouvez choisir de définir une nouvelle adresse MAC, qui est la façon dont le routeur identifie la VM.

SPRBRN
la source
0

J'ai eu une tâche similaire en python. Ce serait probablement utile.

pip install pyvbox

puis en 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
romain
la source
0

J'ai utilisé l'option controlvm pour démarrer une trace de paquet sur le NIC actif de l'invité et j'ai ouvert le fichier local avec Wireshark. L'adresse IP des invités sera là-dedans.

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

wireshark /full/path/file

N'oubliez pas de désactiver la trace lorsque vous avez terminé.

VBoxManage controlvm <vm-name> nictrace<1-N> off
pp-paul
la source
-4
VMNAME="..."; # save ID of VM  in VMNAME variable
vboxmanage guestproperty enumerate $VM_NAME|grep IP|cut -f2 -d,|cut -f2 -d:
Abdennour TOUMI
la source
5
Nous recherchons des réponses substantielles qui fournissent une explication et un contexte. S'il vous plaît ne donnez pas seulement une réponse de code à deux lignes; expliquez pourquoi votre réponse est juste, idéalement avec des citations. Les réponses qui ne contiennent pas d'explications peuvent être supprimées. Mais aussi, votre réponse est équivalente aux réponses précédentes, à l'exception des différences de mise en forme triviales. Veuillez ne pas poster de réponse à moins que vous ayez réellement quelque chose de nouveau à apporter.
G-Man dit `` Réintègre Monica ''
:). vous êtes les bienvenus .. pas du tout
Abdennour TOUMI
@ G-Man: si vous avez des milliers de comptes, connectez-vous et votez. Malheureusement, je ne supprimerai pas la réponse.
Abdennour TOUMI