Como canalizar entrada para o Wireshark no Windows Power Shell?

0

Estou tentando executar o seguinte comando no 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 -

Mas o Wireshark nunca inicia, o PowerShell apenas imprime que o tcpdump está escutando.

Como posso executá-lo no Power Shell?

Eu tenho que mencionar que o comando como mostrado funciona no CMD.

    
por Mohammed Noureldin 08.01.2018 / 00:38

2 respostas

1

Você está tentando enviar um comando do DOS para outro comando DOS, o pipeline do PowerShell. Isso não é realmente uma coisa que você pode fazer. O pipe no cmd.exe não é o mesmo que o pipe no PowerShell.

Para usar o .exe externo com o PowerShell, na maioria dos casos, eles exigem consideração especial e o uso do parâmetro -Arguments para manipular qualquer opção.

Veja detalhes aqui:

PowerShell: Running Executables

There are several different methods for running executables as well as invoking code. How do you know which one to use for the job? Here is an outline of the methods with examples and general use.

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

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

Tubulação significa que você está passando e é objeto de outro cmdlet ou dos resultados de um cmdlet para outro cmdlet. No pipeline, você só pode corresponder por propriedade ou por valor.

Mais definitivamente detalhado aqui:

Two Ways To Accept Pipeline Input In PowerShell

A pipeline in PowerShell is a series of values, expressions, commands or cmdlets that are combined with the pipe operator (|) to send the results of one command or expression to the next. These results are sent through the pipeline as objects or object properties, not just text as from the Windows command console (cmd.exe) or certain other non-PowerShell methods. If the results consist of an array of objects, these objects are sent in one-by-one through the pipeline.

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

O que você tem aqui são dois comandos / exe completamente separados. Então, no host do console do PowerShell, você faria isso ...

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 

Esse ponto-e-vírgula informa ao PowerShell que esses são comandos separados que, por acaso, estão na mesma linha, portanto, execute-os como se estivessem em linhas separadas. Você verá que este ponto-e-vírgula usa muito quando as pessoas montam um forro no host do console do powershell ou no powershell_ise.

    
por 19.01.2018 / 02:36
0

Eu diria que remover o - desse comando pode ajudar - em ambos os lugares. Parece que você deixou em algum lugar.

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 -

    
por 08.01.2018 / 00:48