2012-07-14 160 views
-2

我正在尝试从process()内调用two_byte_proc(有效内容,偏移量),但它不写入输出文件out_buf。偏移或有效负载的输出可能包含无,因此应该跳过这些迭代,并用下一个数据包重新启动处理函数。从函数内部调用Python函数

def process(): 
    pkts = sniff(offline="infile.pcap",filter="tcp") 
    out_buf = open("outfile.bin","wb") 

    for pkt in pkts: 
     offset = hexdump(str(pkt.payload)[:2]) 
     payload = hexdump(pkt.payload) 

     if offset or payload is None: 
      pass 
     else: 
      out_buf.write(two_byte_proc(payload,offset)) 

process() 
+2

函数'two_byte_proc'是什么?它在哪里定义?另外,你是什么意思,它不起作用。如果它没有产生错误,它会做什么让你认为它不起作用? – BrenBarn 2012-07-14 20:39:53

+0

这可以重写为'如果偏移量不是无,有效负载也不是无。 – Ryan 2012-07-14 20:42:19

+1

或者如果不是(偏移或有效载荷):',这更接近原始的简洁性。 (假设'offset'和'payload'永远不会像''“'那样是你想输出的”falsey“值(如果这是一个问题,'如果None(in offset,payload):'也是简洁的,但是清除。) – millimoose 2012-07-14 20:44:46

回答

4

表达式offset or payload is None总是为真;也许你的意思是:

if offset is None or payload is None: 

改为。

自从你“通过”,如果该表达式为真,则可能以及扭转它:

if offset is not None and payload is not None: 
    out_buf.write(two_byte_proc(payload, offset)) 

我怀疑offset和​​是长度> 0或无任一字符串,在这种情况下,可以进一步简化为:

if offset and payload: 
    out_buf.write(two_byte_proc(payload, offset)) 

最后但并非最不重要的,你需要确保two_byte_proc(或four_byte_proc你的编辑之后)实际上回报写给out_buf的东西。例如,如果它返回的是一个空字符串,则不会看到任何结果。

+0

我用你的反馈更新了这个问题,但是根据更新的问题,函数没有写入文件,因为它应该是。 – Astron 2012-07-14 20:56:15

+0

'offset or有效载荷为无“实际上并非总是如此;特别是当'offset'为false并且'payload'是'None'以外的时候它将是错误的。也就是说,逻辑仍然不是预期的。 – 2012-07-14 23:36:28

+0

@KarlKnechtel:我觉得对陈述的逻辑进行严格的细节并不会有帮助。 OP(像很多初次程序员一样)误解了逻辑运算符的组合方式,这就是所有需要进行通信的东西。 – 2012-07-15 08:49:55