วิธีการรับที่อยู่ IP ที่กำหนดให้กับ VM ทำงานในพื้นหลัง?


27

ฉันใช้อินสแตนซ์ Ubuntu ของฉันออกจากกล่องเสมือนในพื้นหลังโดยใช้คำสั่งต่อไปนี้:

VBoxManage startvm ${VM_NAME} --type headless

ความแตกต่างหลักระหว่างนั้นกับการเรียกใช้ผ่าน GUI คือเมื่อฉันอยู่ใน GUI หลังจากที่เริ่มทำงานฉันสามารถตรวจสอบifconfigเพื่อดูว่าที่อยู่ IP คืออะไรเพื่อที่ฉันจะได้sshเข้าไปในเทอร์มินัลของฉันบนโฮสต์และเห็นได้ชัดว่า ไม่ทำอย่างนั้นในพื้นหลัง

สมมติว่ามีการกำหนดที่อยู่ IP แบบไดนามิกบนเครือข่ายมีวิธีการแยก IP ที่กำหนดให้กับอินสแตนซ์ที่สร้างขึ้นใหม่สำหรับวัตถุประสงค์ ssh หรือมีวิธีการ ssh เข้าโดยไม่ทราบ IP (เช่นผ่านพอร์ตลับๆบนโฮสต์ )?

คำตอบ:


16

คุณสามารถใช้คำสั่ง VBoxManage เพื่อแยกที่อยู่ IP ดังแสดงในกระทู้ในฟอรัมนี้บน virtualbox.org:

VBoxManage guestproperty enumerate <vmname>

แม้ว่าคุณจะมีเหตุผลที่ดีมาก แต่คุณจะต้องพิจารณากำหนดที่อยู่ IP แบบคงที่ให้กับผู้เยี่ยมชม vm ของคุณ สิ่งนี้เป็นไปได้แม้ว่าคุณจะใช้ DHCP อยู่ก็ตาม เพียงเลือกที่อยู่ IP ที่อยู่นอกช่วงที่เซิร์ฟเวอร์ DHCP ของคุณจัดสรร


7
คำสั่งนั้นไม่ได้ส่งคืนที่อยู่ IP
สัตว์สะเทินน้ำสะเทินบก

3
คุณต้องมีการติดตั้งส่วนเสริมแขกเพื่อให้สิ่งนี้ทำงานได้
หนัก

ตกลงแล้วคุณจะทำอย่างไรเมื่อไม่ได้ติดตั้งข้อมูลเพิ่มเติมของแขก
code_dredd

1
หรือ: VBoxManage guestproperty get <vmname> "/VirtualBox/GuestInfo/Net/0/V4/IP".
ทอดด์วอลตัน

9

ก่อนอื่นให้แน่ใจว่าคุณได้ติดตั้งVirtualBox Extension Packหรือติดตั้งถ้าไม่

ตัวอย่าง (สำหรับ 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

หรือจาก

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

หลังจากนั้นคุณจะได้รับ IP ของ 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
ยังคงไม่แสดง IP สำหรับฉัน
จอชผ้าแนนกีน

@JoshNankin คุณแก้ปัญหานี้ได้หรือไม่?
user3933607

@JoshNankin สิ่งที่ VBoxManage guestproperty แจกแจง <_name_of_VM_> | grep IP ให้คุณ
weivall

สำหรับ OSX - VBoxManage guestproperty ระบุ 4ab1029f-23ff-4c5c-b4bd-3b6d68aa7cc0 | grep IP | grep -oE "\ b ([0-9] {1,3} \.) {3} [0-9] {1,3} \ b" Regex สำหรับ IP ฉันใช้stackoverflow.com/questions/11482951/…
weivall

5

ฉันรู้ว่าฉันมางานปาร์ตี้สายนี้ แต่จะใช้ได้กับ VirtualBox 5.0.6

วิธีนี้ใช้ VBoxManage เพื่อดึงรายการของการเรียกใช้เครื่องเสมือนสอบถามคุณสมบัติของพวกเขาในการวนรอบและแสดงที่อยู่ IP ในทางที่ค่อนข้างสวย

#!/bin/bash

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

1

คุณสามารถดูตาราง DHCP ในเราเตอร์ก่อนเริ่มและหลังและเปรียบเทียบ หากเราเตอร์แสดงชื่อคอมพิวเตอร์นั่นจะทำให้ง่ายขึ้นแน่นอน นี่อาจไม่ใช่โซลูชันที่ซับซ้อน แต่ใช้งานได้

เราเตอร์ส่วนใหญ่จะกำหนดที่อยู่แบบไดนามิก แต่พวกเขายังคงให้เครื่องหรือ VM (เราเตอร์ไม่ทราบความแตกต่าง) IP เดียวกันตลอดเวลา หากคุณคัดลอก VM ใน Virtualbox คุณสามารถเลือกที่จะตั้งค่าที่อยู่ MAC ใหม่ซึ่งเป็นวิธีที่เราเตอร์ระบุ VM


0

ฉันมีงานที่คล้ายกันในหลาม อาจเป็นประโยชน์

pip install pyvbox

แล้วในไพ ธ อน:

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

ฉันใช้ตัวเลือก controlvm เพื่อเริ่มการติดตามแพ็คเก็ตบน nic ที่ใช้งานอยู่ของแขกและเปิดไฟล์โลคอลด้วย wireshark ที่อยู่ IP ของแขกจะอยู่ในนั้น

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

wireshark /full/path/file

อย่าลืมปิดการใช้งานการติดตามเมื่อคุณทำเสร็จแล้ว

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
เรากำลังมองหาคำตอบมากมายที่ให้คำอธิบายและบริบท โปรดอย่าเพิ่งให้คำตอบโค้ดสองบรรทัด; อธิบายว่าทำไมคำตอบของคุณถึงถูกต้องนึกคิดด้วยการอ้างอิง คำตอบที่ไม่รวมคำอธิบายอาจถูกลบออก แต่คำตอบของคุณเทียบเท่ากับคำตอบก่อนหน้ายกเว้นความแตกต่างของการจัดรูปแบบเล็กน้อย โปรดอย่าโพสต์คำตอบเว้นแต่ว่าคุณมีสิ่งใหม่ที่จะมีส่วนร่วม
G-Man กล่าวว่า 'Reinstate Monica'

:) ยินดีต้อนรับ .. ไม่เลย
Abdennour TOUMI

@ G-Man: หากคุณมีบัญชีหลายพันบัญชีลงชื่อเข้าใช้และลงคะแนนเสียง .. น่าเสียดายที่ฉันจะไม่ลบคำตอบ
Abdennour TOUMI
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.