Python 使用scapy向pcap写入

Python 使用scapy向pcap写入,python,pcap,scapy,Python,Pcap,Scapy,我试图在过滤掉所有NBNS流量后写入pcap文件。这给了我一个语法错误 from scapy.all import * Capture = raw_input("Enter file path of pcap file: " ) pcap = rdpcap(Capture) ports=137 filtered = (pkt for pkt in Capture if (UDP in pkt and (pkt[UDP].sport in str(ports))) wrp

我试图在过滤掉所有NBNS流量后写入pcap文件。这给了我一个语法错误

from scapy.all import *

Capture = raw_input("Enter file path of pcap file: " )
pcap = rdpcap(Capture)

ports=137

filtered = (pkt for pkt in Capture if
    (UDP in pkt and 
    (pkt[UDP].sport in str(ports)))

wrpcap("filtered.pcap",filtered)

我发现语法错误的答案只是
…str(ports))
末尾缺少一个括号,但现在我有了一个不同的错误

  File "receiver2.py", line 18, in <module>
    wrpcap("filtered.pcap",filtered)
  File "/usr/lib/python2.7/dist-packages/scapy/utils.py", 
    line 470, in wrpcap
  PcapWriter(filename, *args, **kargs).write(pkt)
  File "/usr/lib/python2.7/dist-packages/scapy/utils.py", line 652, in write
    for p in pkt:
  File "receiver2.py", line 13, in <genexpr>
    (UDP in pkt and 
  TypeError: 'in <string>' requires string as left operand, not Packet_metaclass
文件“receiver2.py”,第18行,在
wrpcap(“filtered.pcap”,filtered)
文件“/usr/lib/python2.7/dist-packages/scapy/utils.py”,
第470行,在wrpcap中
PcapWriter(文件名,*args,**kargs).write(pkt)
写入文件“/usr/lib/python2.7/dist packages/scapy/utils.py”,第652行
对于pkt中的p:
文件“receiver2.py”,第13行,在
(在pkt和
TypeError:“in”需要字符串作为左操作数,而不是数据包元类

pkt[UDP].sport
通常应为整数而不是字符串。
str(端口)
应仅替换为
端口


我正在使用scapy v3.x。如果您仍然有问题,请尝试使用scapy 3.x(pip安装scapy-python3),我将能够与您一起完成。我在这个代码示例中看到的从python2到python3所需的唯一更改是将原始输入替换为输入。

我尝试了您的脚本,但无法按照编写的方式运行。我对它做了一些更改,我认为它满足了您的需要。希望这对您有所帮助

from scapy.all import *

capture = raw_input("Enter file path of pcap file: " )
pcap = rdpcap(capture)

ports=137

def write(pkt):
    wrpcap('filtered.pcap', pkt, append=True)  #appends packet to output file

for pkt in pcap:
    if pkt.haslayer(UDP) and pkt.getlayer(UDP).sport == ports:  #checks for UDP layer and sport 137
        write(pkt)  #sends the packet to be written if it meets criteria
    else:
        pass

谢谢!这帮助我将自定义数据包写入pcap,如下所示:
packet=Ether()/IP(src=src,dst=dst)/TCP(sport=sport,dport=dport,flags='a')/payload
(newline)
wrpcap(out\fname,packet,append=True)