Como encontro o endereço IP de uma máquina virtual usando o VMware Fusion?


19

Posso determinar o IP de uma máquina virtual usando o VMware Fusion sem entrar no sistema operacional em execução na máquina virtual? Estou procurando uma opção de menu, linha de comando ou outra que possa emitir na imagem virtual com o próprio VMware Fusion Software.

Obrigado - Adron


Se você souber o endereço MAC da NIC da máquina virtual, tente sempre aproveitar o cache ARP da máquina host ou reverter o ARP.
ta.speot.is 31/12/11

É incrível que o vmware não torne isso óbvio e fácil como outros vms! Felicidades pela resposta avahi e nmap se você estiver desesperado, mas ainda assim - Grande falha, VMware!
Nealmcb

Respostas:


1

Resposta curta: Não

Resposta longa: Não, mas talvez

Um endereço IP é de responsabilidade exclusiva de um sistema operacional. Portanto, a estrutura virtual que contém o sistema operacional não tem idéia sobre a pilha TCP / IP, a menos que haja acréscimos simbióticos à estrutura, como o Hyper-V e as ferramentas adicionais do VMware (graças a todda.speot.is nos comentários abaixo) . Não é muito diferente do que querer procurar os arquivos em uma VM sem iniciá-la primeiro.

Tecnicamente, se a VM depende do DHCP, você pode procurar no servidor DHCP (provavelmente o roteador da sua LAN) a última concessão que foi entregue ao endereço MAC da NIC virtual para ter uma boa idéia de qual provavelmente o IP seria o da próxima vez que for lançado. Isso pressupõe que o mesmo IP não tenha sido entregue a outro dispositivo no meio quando você analisou o histórico de concessão e quando a VM foi iniciada.


1
Argh. Eu esperava que o VMware tivesse alguns ganchos no sistema operacional que fornecessem isso. :( Não tenho acesso ao DHCP corporativo, portanto, não faço ideia, pois também não tenho acesso ao sistema operacional real.
Adron

Um hipervisor pode conectar-se e obter o endereço IP, o Hyper V faz isso com suas adições de convidado. E parece que alguns sabores do VMware também lhe dirão kb.vmware.com/Platform/Publishing/images/1006098.JPG - mas como WesleyDavid disse, não é realmente responsabilidade do hipervisor se preocupar com isso.
ta.speot.is 31/12/11

45

O VMWare fornece, sem surpresa, uma ferramenta integrada para isso vmrun,. Está em /Applications/VMware Fusion.app/Contents/Library/vmrunbaixa, embora tenha se movido um pouco em outros lançamentos do Fusion.

🍺 vmrun list
    Total running VMs: 1
    .docker/machine/machines/myvm.vmx

🍺  vmrun getGuestIPAddress ~/.docker/machine/machines/myvm.vmx
    172.16.213.128

7
Essa deve ser a resposta aceita. Funcionou perfeitamente.
Michael Potter

2
Agradável! vmrunestá no PATH do meu Mac por padrão, então vmrun getGuestIPAddress "$(vmrun list | grep vmx)"inclua as aspas!
Big Rich

Aparentemente, o VMWare Tools precisa ser executado na VM. (Fusion V8.5)
Laryx Decidua

10

Aqui está uma dica, caso ajude alguém. Instale avahi-daemonna VM. Isso permite que você se conecte através do nome do host vmname.local, onde vmnameestá o nome da sua máquina virtual. No meu caso, o nome da VM é baremetale no host eu posso executar:

ssh baremetal.local

Não há necessidade de saber o IP da VM. :)


1
Boa ideia, mas e as VMs que executam sistemas operacionais onde avahi-daemonnão estão disponíveis? O Windows, por exemplo, me vem à mente ... :-)
Laryx Decidua

4

É possível - pelo menos, no caso comum, em que a rede no estilo NAT está configurada para o convidado. Como o VMWare está fornecendo o NAT, ele deve nos dizer para que endereço ele está atualmente. Algo como vmrun listdeveria estar produzindo essa informação. Que isso não é uma falha ...

Mas, de qualquer forma, eis como se pode descobrir de qualquer maneira. Primeiro, execute ifconfigno seu Mac (talvez ipconfigfaça o mesmo no Windows, mas ainda não testei). Isso listará todas as interfaces de rede na máquina - físicas e virtuais. Procure os vmnet-ones. No meu Mac, isso produz:

% ifconfig | grep -A2 ^vmnet
vmnet1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:01 
inet 192.168.82.1 netmask 0xffffff00 broadcast 192.168.82.255
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 00:50:56:c0:00:08 
inet 192.168.123.1 netmask 0xffffff00 broadcast 192.168.123.255

Portanto, o IP do meu convidado está em uma dessas duas redes privadas de VM: 192.168.82.0/24 ou 192.168.123.0/24. No seu host, pode haver apenas um, com sorte, ou mais de dois - precisamos verificar todos eles. Aqui está um script tcsh muito simples, inserido diretamente na linha de comando, que fez isso por mim. Ele tenta executar ping em cada endereço em todas as redes privadas de classe C gerenciadas pelo vmnet e termina quando um ping é bem-sucedido. A -W 500opção diz ao ping para aguardar apenas meio segundo por uma resposta (provavelmente poderia usar ainda menos), e -c 1diz para enviar exatamente um pacote:

% set i=2
% while ( $i < 255 )
while? ping -W 500 -c 1 192.168.82.$i && break
while? ping -W 500 -c 1 192.168.123.$i && break
while? @ i++
while? end

O pequeno script acima foi executado por algum tempo, listando todas as tentativas malsucedidas de alcançar os endereços inexistentes:

PING 192.168.82.2 (192.168.82.2): 56 data bytes

--- 192.168.82.2 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING 192.168.123.2 (192.168.123.2): 56 data bytes
...

Até que finalmente conseguiu e terminou:

64 bytes from 192.168.123.130: icmp_seq=0 ttl=64 time=0.307 ms

--- 192.168.123.130 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss

Voilà, eu pude entrar no meu convidado:

% ssh 192.168.123.130
Password:

Agora, eu tinha apenas um convidado em execução - portanto, o primeiro endereço IP a responder a um ping foi o correto. Se você executar vários convidados de uma só vez, pode ser necessário usar o comando ping igual ou semelhante para criar uma lista de todos esses endereços IP privados válidos e, em seguida, experimentar todos eles até chegar ao convidado correto ...

(E, talvez, o .130 é uma boa opção para endereços baseados em NAT de qualquer maneira. Mas não posso ter certeza.)


1
Com nmap você a encontrar os IPs mais rápido ;-)nmap -sP 192.168.123.*
Robert Reiz

4

Como Mikhail T. disse: "Como o VMWare está fornecendo o NAT, ele deve poder nos dizer para que endereços ele está atualmente usando o NAT". De fato, ele faz:

Na minha instalação do VMware Fusion 6, o vmnet-dhcpddaemon grava suas concessões nos arquivos /var/db/vmware/vmnet-dhcpd-vmnetX.leases, onde "X" é 1 e 8. Empiricamente :-) Estabeleci que é o vmnet8 que devo procurar. Aqui está um trecho do arquivo de concessão /var/db/vmware/vmnet-dhcpd-vmnet8.leases:

lease 192.168.177.129 {
    starts 1 2014/02/17 09:34:19;
    ends 1 2014/02/17 09:36:56;
    hardware ethernet 00:0c:29:2b:2b:10;
    client-hostname "ubuntu";
}

O client-hostnameé o nome da VM e o número após a palavra leaseé seu IP. Você pode analisar essas entradas ou simplesmente olhar as mais recentes. Verifique se o contrato que você está procurando ainda é válido.


2

Minha solução para isso foi:

Depois de instalar as ferramentas VMware, configure o compartilhamento para poder acessar uma pasta (qualquer pasta) no CentOS. Em seguida, modifique / etc / sysconfig / network-scripts / ifup-post para anexar sua data e endereço IP atuais a um arquivo nesta pasta compartilhada.

Como fazer isso:

Modifique: / etc / sysconfig / network-scripts / ifup-post

adicione isso antes da última linha do ifup-post ("exit 0"):

date >> /path/to/shared/folder/guest_ip.log
ifconfig >> /path/to/shared/folder/guest_ip.log

Isso anexará seu guest_ip.log com a data e o valor de retorno de ifconfig toda vez que a rede surgir.

No meu caso, decidi grep para um prefixo 192 no meu endereço IP, pois sei que entre minha casa e trabalho, é sempre 192. Isso pode ser feito ajustando-se da seguinte maneira:

date >> /path/to/shared/folder/guest_ip.log
ifconfig | grep 192 >> /path/to/shared/folder/guest_ip.log

"para que você possa acessar uma pasta (qualquer pasta) no CentOS." E aquelas pessoas que 1) usam outras distribuições Linux, 2) usam sistemas operacionais UNIX diferentes do Linux, 3) usam sistemas operacionais não-Unix, como Windows, ... em suas VMs? :-)
Laringe Decidua 01/09/14

1

Execute no console da VM ipconfig(se a VM for Windows) ou ifconfig(se a VM for Linux).

IP de eth0é o endereço IP que você está procurando.


A pergunta original era "sem realmente entrar no sistema operacional em execução na máquina virtual?" Isso pode ter escapado da sua atenção.
Laryx Decidua

Pode não responder à pergunta, mas acabei aqui com uma pergunta um pouco diferente e foi útil.
21330 Jamie-Wilson Wilson

1

Eu tive o mesmo problema ao executar o VMPlayer no Ubuntu 15.04. Minha máquina virtual foi configurada para NAT e, embora eu pudesse determinar seu endereço IP entrando na GUI e executando o ifconfig na VM, não consegui executar ping ou ssh nela.

Acontece que quando o VMPlayer foi instalado, ele não ativou o dhcp no adaptador vmnet1 e vmnet8. A solução foi usar o ubuntu gui para editar as conexões de rede com "Editar conexões". Encontre vmnet1 em ethernet e clique no botão editar. Nas configurações do IPv4, ative o DHCP, salve e reinicie.

Agora, se você executar o ifconfig na linha de comando, notará que o vmnet1 tem um endereço IP. Agora, o SSHing na VM nativa do host também funciona.


0

Nas páginas de manual do vmrun (versão 1.14.4 build-3204469):

getGuestIPAddress        Path to vmx file     Gets the IP address of  the guest
                         [-wait]

No entanto, lembre-se de que, para que isso funcione, o conjunto VMware Tools deve ser instalado no SO convidado e esta etapa não pode ser realizada sem o log no SO convidado. Você pode instalar as ferramentas em uma "imagem base" e criar novas imagens a partir dela, através da clonagem. Em seguida, você pode usar o comando acima para obter o endereço IP das VMs recém-criadas.


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.