QEMU虚拟机IP探测

QEMU虚拟机以桥接网络模式启动后,虚拟机的ip会与主机网卡处于同一个网段,但是具体ip是无法确定的,需要一定的方法去探测到。

方法1:查看主机的arp表。

这种方法简单,但是得要主机与靶机之间有过通信才会在arp表里留下记录。如下,启动靶机后并没有对应的表项,在靶机中ping一下主机后就有了。

a06912faf18b4400b87c2e8e61f61412.png

8a7daca7e20244b0bfd9611e9c3792a6.png

那么要触发主机与靶机之间的通信,要么让靶机启动时自动执行ping命令,要么如果网络比较小的话,让主机对当前网段的所有可能ip进行探测,这样也能触发通信。

 

方法2:使用QEMU Guest Agent

在靶机中安装QEMU Guest Agent,然后传输信息,这个方法不太优雅。

 

方法3:使用virsh啥的,libvirt那些高层的组件支持这些功能了。

 

不打算用太多其他高级的组件,只用qemu。

因此采用的思路是:让靶机开机启动时执行ping命令,然后主机的arp表就肯定有记录了,然后主机中根据arp表来

编辑 /etc/rc.local 文件

vim /etc/rc.local

在文件底部加入需要执行的命令,示例如下:

06016cc3872f419eb7b72077740e5456.png

保存,然后reboot 重启。

如下,在主机中监听ens33网卡,启动靶机后会有挺多报文发送到主机中。

8721c86f7c404434896334c72748dbbb.png

则arp表中必定会有相应的条目了。

d25b4425c86749cdbb4a807bf5f4bc10.png 

执行如下命令即可探测到mac对应的ip是多少了。

ip neigh | grep 52:54:6b:c7:82:dc | awk '{print $1}'

668d94938f344c9cabfcbb4c0c01e60f.png

这种方法有时候也会失灵,可以使用nmap -sn 192.168.150.0/24进行ping扫描。

或者使用python scapy来自动化探测。

如果当前主机的arp表还没有当前ip的mac地址,则会默认使用广播包来发送。

ff6a9da28e544c4d9f82ef3ab4cbfa88.png

但是这样需要scapy查询一下arp表再设置使用广播mac地址发送,会大大增加时延,因此直接设置mac dst为ff:ff:ff:ff:ff:ff。

因为注定会有大量ping是没有回复的,因此设置timeout参数为1,只等待1秒即可。

但是执行如下命令,却只收到两个ping回复!?

ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/IP(dst="192.168.150.0/24")/ICMP(),timeout=1)fa016d4d148c433190db3468d90e4876.png

具体原因不分析了,直接使用arp ping来探测吧,这是最快的方法了!

ans,unans=srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst="192.168.150.0/24"),timeout=2)

86b40eacc3964fff8fd10706e50d638f.png

0aac5db948584faabe8f94be0f68bc81.png 

编写python脚本,输入mac地址,输出对应的ip地址。

57f55fa42fb0486da1ab06fb54655fbe.png

 

 

猜你喜欢

转载自blog.csdn.net/m0_43406494/article/details/124829256