Làm cách nào để lấy địa chỉ IP được gán cho VM chạy trong nền?


27

Tôi chạy phiên bản Ubuntu của mình ra khỏi Virtual Box trong nền bằng lệnh sau:

VBoxManage startvm ${VM_NAME} --type headless

Sự khác biệt chính giữa điều đó và chạy nó thông qua GUI là, khi tôi ở trong GUI sau khi nó khởi động, tôi có thể kiểm tra ifconfigxem địa chỉ IP là gì để tôi có thể truy cập sshnó từ thiết bị đầu cuối của mình trên máy chủ và rõ ràng là có thể ' t làm điều đó trong nền.

Giả sử việc gán địa chỉ IP động trên mạng, có một cách để trích xuất IP được gán cho phiên bản mới được tạo cho mục đích ssh HOẶC có cách nào để ssh vào mạng mà không biết IP (ví dụ: qua cổng backlink trên máy chủ )?

Câu trả lời:


16

Bạn có thể sử dụng lệnh VBoxManage để trích xuất địa chỉ IP, như được hiển thị trong bài đăng trên diễn đàn này trên virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

Trừ khi bạn có lý do rất chính đáng, tuy nhiên, bạn sẽ muốn xem xét mạnh mẽ việc gán địa chỉ IP tĩnh cho vm khách của bạn. Điều này là có thể mặc dù bạn có thể đang sử dụng DHCP. Chỉ cần chọn một địa chỉ IP ngoài phạm vi mà máy chủ DHCP của bạn phân bổ.


7
lệnh đó đã không trả về địa chỉ IP
lưỡng cư

3
Bạn cần phải có các bổ sung khách được cài đặt để làm việc này.
heavyyd

Ok, làm thế nào để bạn làm điều này khi bổ sung khách không được cài đặt?
code_dredd

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

9

Trước hết, hãy đảm bảo bạn đã cài đặt Gói mở rộng VirtualBox hoặc cài đặt nó nếu không.

Ví dụ: (đối với 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

hoặc từ

https://www.virtualbox.org/wiki/Tải xuống

Sau đó, bạn có thể nhận IP của 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
vẫn không hiển thị IP cho tôi
Josh Nankin

@JoshNankin Bạn đã giải quyết điều này?
dùng3933607

@JoshNankin những gì khách hàng VBoxManage liệt kê <_name_of_VM_> | grep IP mang lại cho bạn?
weivall

cho OSX - VBoxManage Guestproperty liệt kê 4ab1029f-23ff-4c5c-b4bd-3b6d68aa7cc0 | grep IP | grep -oE "\ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b" Regex cho IP Tôi đã lấy stackoverflow.com/questions/11482951/
vào

5

Tôi biết tôi đến trễ bữa tiệc này, nhưng điều này sẽ hoạt động với VirtualBox 5.0.6.

Điều này sử dụng VBoxManage để lấy danh sách các máy ảo đang chạy, truy vấn các thuộc tính của chúng trong một vòng lặp và hiển thị các địa chỉ IP theo cách khá hay.

#!/bin/bash

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

1

Bạn có thể nhìn vào bảng DHCP trong bộ định tuyến, trước khi khởi động và sau đó và so sánh chúng. Nếu bộ định tuyến hiển thị tên máy tính, điều đó làm cho nó dễ dàng hơn rất nhiều. Đây có thể không phải là một giải pháp tinh vi, nhưng nó hoạt động.

Hầu hết các bộ định tuyến đều gán địa chỉ động, nhưng họ liên tục cho một máy hoặc VM (bộ định tuyến không biết sự khác biệt) trong cùng một thời gian. Nếu bạn sao chép VM trong Virtualbox, bạn có thể chọn đặt địa chỉ MAC mới, đó là cách bộ định tuyến xác định VM.


0

Tôi đã có nhiệm vụ tương tự trong python. Có lẽ nó sẽ hữu ích.

pip install pyvbox

và sau đó trong 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

Tôi đã sử dụng tùy chọn controlvm để bắt đầu theo dõi gói tin trên nic hoạt động của khách và mở tệp cục bộ bằng wireshark. Địa chỉ IP của khách sẽ ở đó.

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

wireshark /full/path/file

Đừng quên vô hiệu hóa dấu vết khi bạn hoàn thành.

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
Chúng tôi đang tìm kiếm câu trả lời đáng kể cung cấp một số giải thích và bối cảnh. Xin đừng chỉ đưa ra một câu trả lời mã hai dòng; giải thích tại sao câu trả lời của bạn là đúng, lý tưởng với trích dẫn. Câu trả lời không bao gồm giải thích có thể được gỡ bỏ. Nhưng ngoài ra, câu trả lời của bạn tương đương với câu trả lời trước ngoại trừ sự khác biệt định dạng tầm thường. Vui lòng không đăng câu trả lời trừ khi bạn thực sự có điều gì đó mới để đóng góp.
G-Man nói 'Phục hồi Monica'

:). không được chào đón .. hoàn toàn không
Abdennour TOUMI

@ G-Man: nếu bạn có hàng ngàn tài khoản, hãy đăng nhập vào chúng và bỏ phiếu .. Thật không may, tôi sẽ không xóa câu trả lời.
Abdennour TOUMI
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.