用C#语言,如何实现在宿主机上修改虚拟机的MAC地址?

能提供详细代码最好!比较急。谢谢。... 能提供详细代码最好!比较急。谢谢。 展开
 我来答
makosharp
2014-03-14 · TA获得超过676个赞
知道小有建树答主
回答量:188
采纳率:100%
帮助的人:278万
展开全部

- -| 这种奇怪的需求……。


我们要解决两个问题:

  1. 在宿主上控制VM虚拟机

  2. 在虚拟机上运行修改MAC地址的应用




问题1你需要使用VM的命令行,也就是VMRun。这里列举你需要用到的命令。

【以下资料来自网络】

vmrun -T ws -gu USERNAME -gp PASSWORD copyFileFromHostToGuest "C:\VMs\VM1\VM1.vmx" "C:\sourcebatch.bat" "C:\destbatch.bat"

将宿主的c:\sourcebatch.bat拷贝到虚拟机并放置于虚拟机的c:\位置,改名为destbatch.bat


vmrun -T ws -gu USERNAME -gp PASSWORD runProgramInGuest "C:\VMs\VM1\VM1.vmx" cmd.exe "/c C:\destbatch.bat"

在虚拟机中运行c:\destbatch.bat


vmrun -T ws -gu USERNAME -gp PASSWORD deleteFileInGuest "C:\VMs\VM1\VM1.vmx" "C:\destbatch.bat"

删除虚拟机的c:\destbatch.bat


其中,USERNAME代表你的虚拟机的登陆账号;PASSWORD是虚拟机的登录账号对应的密码;“C:\\VMs\\VM1\VM1.vmx表示你的虚拟机在宿主机上的镜像文件;”C:\sourcebatch.bat"是宿主机上要传送至虚拟机的文件;"c:\destbatch.bat“是文件传送(宿主到虚拟机)的目标文件;cmd.exe "/c c:\destbatch.bat"是一整句,表示要求虚拟机运行的指令。


关于vmrun,请参考vmware的说明文档。


问题2,我们没有必要自己用c#写一个修改网卡mac的应用,因为有现成的命令行工具MacShift(请自行下载)。


【以下资料来自网络】

命令行:macshift.exe 00112233445566 -i "无线网卡名字" 

上面的 macshift.exe 就是主程序,00112233445566 是您想改到的 MAC 地址,-i 是开关选项。

"无线网卡名字" 可以是系统自己默认的,也可以是您自己改/选的, 比如您把某个无线网卡在控制面板里面的名字改成 "Ulgsm4UWifi", 那么就键入 "Ulgsm4UWifi" (要保留引号)。


结果就是这样:


macshift.exe 00112233445566 -i "Ulgsm4UWifi" 




OK,结合上述两项,我们开始做你需要的东西。

  1. 确保宿主机有一个与虚拟机之间的共享目录(假设是c:\vmshare;确保虚拟机有.NET环境;确保你有虚拟机的管理员账户和密码(假设是USERNAME和PASSWORD)。

  2. 下载macshift.exe小工具,放在宿主的c:\vmshare下

  3. 写你的C#应用。在代码中使用System.Diagnostics.Process类执行vmrun指令(复制c:\vmshare\macshift.exe文件到虚拟机、命令虚拟机执行其本地的c:\macshift.exe -......(参数)。

System.Diagnostics.Process process = new System.Diagnostics.Process();
                    process.StartInfo.FileName = @"C:\Program Files\VMware\VMware Workstation\vmrun.exe";
                    process.StartInfo.Arguments = " -T ws -gu USERNAME -gp PASSWORD copyFileFromHostToGuest  \"c:\\VMs\\VM1\\VM1.vmx\" \"C:\\vmshare\\macshift.exe\" \"C:\\macshift.exe\"";
                    process.Start();

依法炮制,再命令虚拟机带参执行拷贝过去的macshift.exe。

System.Diagnostics.Process process = new System.Diagnostics.Process();
                    process.StartInfo.FileName = @"C:\Program Files\VMware\VMware Workstation\vmrun.exe";
                    process.StartInfo.Arguments = " -T ws -gu USERNAME -gp PASSWORD runProgramInGuest \"C:\\VMs\\VM1\\VM1.vmx\" c:\\macshift.exe 00112233445566 -i \"本地网络\"";
                    process.Start();


结束!

追问
厉害啊!非常感谢你的详细回答!
估计不会有比你更专业的回答了!
我先去实践一下,然后尽快反馈你。
谢谢~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式