获取“netsh dhcp server ...”命令的输出

时间:2013-12-13 19:35:25

标签: windows output netsh

这可能听起来很简单,但是我已经在墙上撞了好几个星期了。我有一个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地址,主机名等列表。现在我需要得到那个输出!

  1. 使用_popen和_pclose在C ++中的标准输入/输出不起作用。输出为空白
  2. Ruby不起作用...... ruby -e "puts ``netsh dhcp...“`什么都没给我
  3. Python不起作用...... import subprocess, subprocess.call('netsh dhcp...')没有给我任何东西
  4. 如果我从命令行运行,批处理文件中的命令附加“> SomeFile.txt”,但是如果这些方法中的任何一个调用批处理文件运行,即使使用“/ start”开关也不行。如果我手动执行批处理文件,输出文本文件将填充我的良好数据,但如果程序调用它则不会。太令人沮丧了。
  5. 我很确定我已尝试过更多方法,这些只是我能记住的工具。我的系统是Windows 7 Professional 64位。可能没关系,因为有关“netsh dhcp server ...”的命令会使输出转到......某处?我看过STDOUT和STDERR。其他netsh命令很好,例如“netsh show helper”,但与DHCP服务器的通信使得该文本无法获得。

    我甚至已经花了很长时间来运行Wireshark捕获,看看我是否可以采取嗅探我想要的数据的路线。
    All packets showed up right after executing the command This is the second page... You can see it goes into RPC stuff

    所以它从LDAP的东西开始,然后是RPC的东西,所有这些我似乎无法提取我需要的信息,也无法理解RPC协议。但我想要的只是命令的输出!我觉得我不应该这么做!

    如果有人对如何获取这个怪异命令的输出有任何想法,即使只是一个文件,我都是耳朵。我可以使用编程轻松获取文件的输出。

3 个答案:

答案 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