[Linux] 使用 nmap 輔助找出 VirtualBox VM 目前的 IP address
今天在家裡用 VPN 連到公司電腦,想再用 SSH 連到一台 VirtualBox VM 時,
發現… 那台 VM 剛重開機,DHCP IP 不曉得被換到哪裡去了…
如果在公司裡面自然好辦,直接用 VirtualBox console 操作 VM 就可以看,
但是我在家裡看不到 VirtualBox console,該怎麼辦呢?
網路上查了一下,有人建議先查出 VM 的 MAC address,
再從 ARP table 裡反查出相對應的 IP address,
嘗試了幾次終於成功了,把步驟記錄一下~
參考資料:
– serverfault: Connect via SSH to VirtualBox guest VM without knowing IP address
– stackoverflow: Can I determine the current IP from a known MAC Address?
1. 用 VBoxManage 指令查詢 VM 的 MAC address
先用 VBoxManage list runningvms 看一下目前在執行中的 VM:
root@localhost ~ $ VBoxManage list runningvms "CentOS_7" {9d165780-30e2-42d7-87e0-c67b01699bf6} "Build CentOS 7.0" {51a7f7a8-6942-4895-8d7a-b0596a6e35bb}
找到要操作的 VM 之後,可以用 VBoxManage showvminfo <vmname> 來看詳細資料,
這邊我們只要看 MAC 就好了~
可以看到在網路卡 NIC1 的地方,MAC address 是 080036F5ED13~
(一般的 MAC 表示法會是 08:00:36:F5:ED:13)
root@localhost ~ $ VBoxManage showvminfo "Build CentOS 7.0" | grep MAC NIC 1: MAC: 080036F5ED13, Attachment: Bridged Interface 'em1', Cable connected: on, Trace: off (file: none), Type: 82540EM, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
2. 從 ARP table 中尋找 MAC address
執行 arp -n 可以列出目前系統中的 ARP 列表,
-n 代表 numeric,好讓 IP address 不會以 hostname 顯示:
root@localhost ~ $ arp -n
Address HWtype HWaddress Flags Mask Iface
10.1.116.1 ether 90:e6:ab:ac:6e:2e C em1
目前系統裡只有一個 IP -> MAC address 的對應 (因為是這台電腦有連過的 IP 才會記錄進來),
而且很顯然地沒有我們要找的 VM 的 MAC address…
這時就要請 nmap 大大出手了~
3. 使用 nmap 掃瞄區網中的所有 IP address
前面說到 ARP table 裡記錄的是這台電腦有連過的 IP address,
因此只要我們可以把「可能是目標電腦」的 IP address 都掃過一次,
這些電腦的 IP -> MAC address 對應就會寫到 ARP table 裡了~
先用 yum 安裝 nmap:
sudo yum -y install nmap
裝好之後,可以執行 nmap –help 看一下說明~
nmap 預設會作 port scan,這個動作很容易被 IT 認為是有問題的,
而我其實也只需要 ping 的結果,因此加上 -sn 選項確保只做 ping scan~
位址範圍的話,因為我知道那台 VM 可能拿到的 IP 都在 10.1.116.xxx ~ 10.1.119.xxx 之間,
因此設定成 10.1.116-119.0-255~
也可以先加上 -sL 選項讓 nmap 先列出預定要掃的 IP address,沒問題就拿掉 -sL 選項開始掃了~
root@localhost ~ $ nmap -sn 10.1.116-119.0-255 Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-11 23:19 CST Nmap scan report for 10.1.116.0 ...... Nmap scan report for 10.1.119.255 Nmap done: 1024 IP addresses (0 hosts up) scanned in 3.73 seconds
4. 再次從 ARP table 中尋找 MAC address
執行完 nmap 的 ping scan 之後,ARP table 應該會多出許多資料~
下面用 grep 找看看那個 MAC address 在不在…
Bingo! 成功找到這個 MAC address 對應到的 IP 是 10.1.116.34 囉~
root@localhost ~ $ arp -n | grep -i "08:00:36:f5:ed:13" 10.1.116.34 ether 08:00:36:f5:ed:13 C em1
不過要注意的是,這個方法不一定會成功…
像我有其他的 VM 也在上述的 IP 範圍內,但用這方法卻無法在 ARP table 中找到 MAC address….
只能碰碰運氣囉,不成功的話可能得再想想別的法子… :O