Как передать ввод в Wireshark в Windows Power Shell?

729
Mohammed Noureldin

Я пытаюсь запустить следующую команду в Power Shell:

C:\Users\mne\Desktop\plink.exe -ssh -pw abc root@myhost "tcpdump -w - -U -i vethf90673c 'port 5000'" | &"C:\Program Files\Wireshark\Wireshark.exe" -k -i - 

Но Wireshark никогда не запускается, PowerShell просто печатает, что tcpdump слушает.

Как я могу запустить его в Power Shell?

Я должен упомянуть, что команда, как показано, работает в CMD.

0
ответ здесь https://osqa-ask.wireshark.org/questions/23609/remote-capture-via-ssh-and-pipe не использует `&` после канала, попробуйте это. но, вероятно, это стиль Cygwin. попробуйте это: `plink.exe -ssh -pw abc root @ myhost" tcpdump -w - -U -i vethf90673c 'port 5000' "*> & 1 | "C: \ Program Files \ Wireshark \ Wireshark.exe" -k -i -` SimonS 6 лет назад 0
@ SimonS, нет, это не работает. Mohammed Noureldin 6 лет назад 0
Вы пытаетесь передать команду DOS другой команде DOS, одной в конвейере PowerShell. Это действительно не то, что вы можете сделать. postanote 6 лет назад 0

2 ответа на вопрос

1
postanote

Вы пытаетесь передать команду DOS другой команде DOS, одной в конвейере PowerShell. Это действительно не то, что вы можете сделать. Канал в CMD.exe отличается от канала в PowerShell.

Чтобы использовать внешний .exe в PowerShell, в большинстве случаев они требуют особого внимания и использования параметра -Arguments для обработки любых ключей.

Подробности смотрите здесь:

PowerShell: запуск исполняемых файлов

Существует несколько различных способов запуска исполняемых файлов, а также вызова кода. Как вы знаете, какой использовать для работы? Вот краткое изложение методов с примерами и общего использования.

https://social.technet.microsoft.com/wiki/contents/articles/7703.powershell-running-executables.aspx

http://edgylogic.com/blog/powershell-and-external-commands-done-right

Конвейер означает, что вы передаете и возражаете против другого командлета или результаты командлета другому командлету. На конвейере вы можете сопоставить только по свойству или по значению.

Более подробно здесь:

Два способа принять конвейерный ввод в PowerShell

Конвейер в PowerShell - это набор значений, выражений, команд или командлетов, которые объединяются с оператором канала (|) для отправки результатов одной команды или выражения следующей. Эти результаты отправляются через конвейер в виде объектов или свойств объекта, а не просто в виде текста, как из командной консоли Windows (cmd.exe), или некоторыми другими методами, отличными от PowerShell. Если результаты состоят из массива объектов, эти объекты передаются по одному через конвейер.

https://blogs.technet.microsoft.com/askpfeplat/2016/11/21/two-ways-to-accept-pipeline-input-in-powershell

Здесь у вас есть две совершенно разные команды / exe. Итак, на хосте консоли PowerShell вы бы сделали это вместо этого ...

C:\Users\mne\Desktop\plink.exe -ssh -pw abc root@myhost "tcpdump -w - -U -i vethf90673c 'port 5000'" ; C:\Program Files\Wireshark\Wireshark.exe -k -i 

Эта точка с запятой сообщает PowerShell, что это отдельные команды, которые просто находятся в одной строке, поэтому выполняйте их, как если бы они были в отдельных строках. Вы увидите, что эта точка с запятой часто используется, когда люди вырабатывают один вкладыш в хост-узле powershell или powershell_ise.

0
Modelmat

Я бы сказал, что удаление -этой команды может помочь - в обоих местах. Похоже, вы оставили его где-то.

C:\Users\mne\Desktop\plink.exe -ssh -pw abc root@myhost "tcpdump -w - -U -i vethf90673c 'port 5000'" | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -

Нет, это часть командного синтаксиса. Mohammed Noureldin 6 лет назад 0