这可能听起来很简单,但是我已经在墙上撞了好几个星期了。我有一个C ++程序需要获取以下Windows命令行命令的输出:
netsh dhcp server 192.168.200.15 scope 192.168.200.0 show clients 1
继续尝试,用你的DHCP服务器取代192.168.200.15(在我的情况下,它是Windows 2003服务器 - 我猜你的DHCP服务器必须是Windows才能使用这个命令)和192.168.200.0用您正在使用子网。它产生了一个很好的MAC地址,IP地址,主机名等列表。现在我需要得到那个输出!
ruby -e "puts ``netsh dhcp...
“`什么都没给我import subprocess, subprocess.call('netsh dhcp...')
没有给我任何东西我很确定我已尝试过更多方法,这些只是我能记住的工具。我的系统是Windows 7 Professional 64位。可能没关系,因为有关“netsh dhcp server ...”的命令会使输出转到......某处?我看过STDOUT和STDERR。其他netsh命令很好,例如“netsh show helper”,但与DHCP服务器的通信使得该文本无法获得。
我甚至已经花了很长时间来运行Wireshark捕获,看看我是否可以采取嗅探我想要的数据的路线。
所以它从LDAP的东西开始,然后是RPC的东西,所有这些我似乎无法提取我需要的信息,也无法理解RPC协议。但我想要的只是命令的输出!我觉得我不应该这么做!
如果有人对如何获取这个怪异命令的输出有任何想法,即使只是一个文件,我都是耳朵。我可以使用编程轻松获取文件的输出。
答案 0 :(得分:0)
一些选项:
1)此命令需要管理员权限,您确定以管理员身份运行该程序吗?
2)您正在使用不能同时读写的_popen
。尝试使用ShellExecute
,例如ShellExecute(0, "open", "cmd.exe", "/C *yourCommand* > output.txt", 0, SW_HIDE);
答案 1 :(得分:0)
DHCP服务器API在PowerShell中得到全面展示 - 这意味着有一堆.Net类可以包装到COM或本机DLL函数中,您可以从C ++应用程序中调用它们。准备将.NET运行时加载到进程中。
当然,您可以对包装器进行反编译,以查看它们如何获取数据,然后复制相同的本机路径以绕过CLR堆栈。
答案 2 :(得分:0)
非常晚,但以防其他人发现这个......
您可能需要运行
工作站上netsh add helper dhcpmon.dll
。