tshark выдает неверную ошибку фильтра захвата

Я пытаюсь перехватить пакеты между двумя хостами с помощью скрипта Python. Функция выглядит следующим образом:

def wire_cap(IP1,IP2,op_fold,file_name,duration):  # invoke tshark to capture traffic during session
    batcmd='"c:\\Program Files\\Wireshark\\tshark.exe" -i 1 src ' + str(IP1) + ' or src '+ str(IP2) +' -a duration:'+str(duration)+' -P -w '+ op_fold+file_name+'.pcap'
    p = subprocess.Popen(batcmd, shell=True,stderr=subprocess.PIPE)
    while True:
        out = p.stderr.read(1)
        if out == '' and p.poll() != None:
            break
        if out != '':
            sys.stdout.write(out)
            sys.stdout.flush()
    thread.exit()

Однако это дает следующую ошибку:

Capturing on 'Local Area Connection'
tshark: Invalid capture filter "src 172.28.3.87 or src 172.28.3.56 -a duration:40 -P -w C:\Python_Scripts\wire_capture.pcap" for interface 'Local Area Connection'!

That string isn't a valid capture filter (syntax error).
See the User's Guide for a description of the capture filter syntax.
0 packets captured

Первоначально я думал, что проблема связана с интерфейсом, который передается как «1», но после проверки с помощью Wireshark, похоже, с этим проблем нет. Я также проверил с официальной документацией. Каждый вариант, который я прошел, выглядит нормально.

Я уверен, что здесь что-то упускаю. Было бы очень полезно получить какие-либо указания, предлагающие это.


person skrowten_hermit    schedule 07.10.2015    source источник


Ответы (1)


Ваша команда tshark:

c:\\Program Files\\Wireshark\\tshark.exe" -i 1 src 172.28.3.87 or src 172.28.3.56 -a duration:40 -P -w C:\Python_Scripts\wire_capture.pcap

Эта команда смешивает аргументы флага командной строки (начинающиеся с -) и аргументы фильтра захвата. Аргументы фильтра захвата должны либо следовать после всех аргументов флага командной строки, т. е.

c:\\Program Files\\Wireshark\\tshark.exe" -i 1 -a duration:40 -P -w C:\Python_Scripts\wire_capture.pcap src 172.28.3.87 or src 172.28.3.56

или быть частью аргумента флага командной строки, а именно аргумента -f:

c:\\Program Files\\Wireshark\\tshark.exe" -i 1 -f "src 172.28.3.87 or src 172.28.3.56" -a duration:40 -P -w C:\Python_Scripts\wire_capture.pcap

Это стандартное соглашение для команд UN*X и для команд Windows, использующих синтаксис в стиле UN*X (что обычно означает команды, созданные в UN*X, как это сделал tshark, или которые пытаются поддерживать совместимость с командами UN*X). ).

Поэтому постарайтесь

    batcmd='"c:\\Program Files\\Wireshark\\tshark.exe" -i 1 -a duration:'+str(duration)+' -P -w '+ op_fold+file_name+'.pcap src ' + str(IP1) + ' or src '+ str(IP2)
person Community    schedule 07.10.2015
comment
Ой. Это было полезно. Большое спасибо. Ваш ответ сделал свое дело! - person skrowten_hermit; 07.10.2015