tshark给出了无效的捕获过滤器错误

时间:2015-10-07 06:55:18

标签: python syntax-error wireshark tshark

我试图使用python脚本在两台主机之间捕获数据包。功能如下:

SELECT UPPER(DEPARTMENT.STATE), COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY UPPER(DEPARTMENT.STATE)
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20;

但是,这会出现以下错误:

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()

最初,我认为问题出在接口上,接口是' 1',但在用Wireshark检查后,似乎没有问题。我也验证了官方文档。我通过的每个选项看起来都很好。

我确定我错过了这里的一些东西。收到任何建议的指示非常有帮助。

1 个答案:

答案 0 :(得分: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命令的标准惯例 - 对于使用UN * X风格语法的Windows命令(通常意味着起源于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)