2013-12-13 3 views
2

Это может показаться простым, но я несколько недель обрушился на стену. У меня есть программа C++, которая должна получить выход из следующих команд в командной строке Windows:Получить вывод команды «netsh dhcp server ...»

netsh dhcp server 192.168.200.15 scope 192.168.200.0 show clients 1 

идти вперед и попробовать, что, заменив 192.168.200.15 с сервером DHCP (в моем случае это сервер для Windows 2003 - - Я предполагаю, что ваш DHCP-сервер должен быть Windows для работы с этой командой) и 192.168.200.0 с подсети, в которой вы находитесь. Он создает хороший список MAC-адресов, IP-адресов, имен хостов и т. Д. Теперь мне нужно получить этот вывод!

  1. Стандартный ввод/вывод в C++ с использованием _popen и _pclose не работает. Вывод пустой
  2. Рубин не работает ... ruby -e "puts ``netsh dhcp... «` не дает мне ничего
  3. Python не работает ... import subprocess, subprocess.call('netsh dhcp...') не дает мне ничего
  4. команду в пакетном файле, прилагаемые с»> некоей-файлом .txt "работает, если я запускаю из командной строки, но не, если ЛЮБОЙ из этих методов вызывает командный файл для запуска, даже с помощью переключателя"/start ". Выходной текстовый файл заполняется моими хорошими данными, если я исполняю пакетный файл

Я уверен, что я пробовал больше методов, это всего лишь инструменты, которые я могу запомнить. Моя система - Windows 7, но я не знаю, как это сделать. Профессиональный 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. Но все, что я хочу, это результат команды! Я чувствую, что мне не должно быть так много!

Если у кого-то есть идеи о том, как просто получить результат этой freaking команды, даже в файл, я ВСЕ УШИ. Я могу использовать программирование, чтобы легко получить вывод файла.

ответ

0

Некоторые опции:

1) Эта команда требует прав администратора, Вы уверены, что вы запускаете программу как администратор?

2) Вы используете _popen, который не может читать и писать. попробуйте использовать ShellExecute, что-то вроде ShellExecute(0, "open", "cmd.exe", "/C *yourCommand* > output.txt", 0, SW_HIDE);

+0

Я работаю как администратор. ShellExecute выполняется нормально, и output.txt создается, но полностью пуст. – armani

0

API-интерфейс DHCP-сервера всесторонне подвергается в PowerShell - это означает, что есть куча .Net классов доступны, которые можно обернуть в любой COM или встроенные функции DLL, которые вы можете позвонить с вашим C++ приложение, вы готовы загрузить среду выполнения .NET в этот процесс.

Вы можете, конечно, декомпилировать обертки, чтобы посмотреть, как они попадают на данные, и следовать за копированием одного и того же собственного пути для обхода стека CLR.

+0

Я изучил опции PowerShell, и они представляют ту же проблему. Я не могу декомпилировать обертки, и мне не представляется возможным загрузить .NET-среду выполнения в мое приложение. – armani

+0

Для того, чтобы это работало, должен быть RPC для связи с сервером. Если вы можете найти функцию, отвечающую за это, определите ее подпись, вы можете (без гарантий поддержки) вызвать ее напрямую. Что-то вроде зависимости или procview позволит вам установить дерево вызовов в команде netsh, которая вам нужна. – Pekka

0

Чрезвычайно поздно, но на всякий случай кто-то найдет это ... Возможно, вам нужно будет запустить netsh add helper dhcpmon.dll на рабочей станции.