我尝试用Scapy编写TCP RST atack,但我的代码不起作用。请帮我解决问题。
from scapy.all import *
def poison(packet):
packet[TCP].flags='RST'
sendp(packet)
sniff(filter='tcp',prn=poison)
我认为flags
出现了问题。这是一个错误:
追踪(最近的呼叫最后):
文件" Univer.py",第6行,in 嗅探(滤波器=' TCP',PRN =毒)
文件" /usr/lib/pymodules/python2.6/scapy/sendrecv.py" ;,第559行,在嗅 r = prn(p)
文件" Univer.py",第3行,中毒 包[TCP] .flags =' RST'
File" /usr/lib/pymodules/python2.6/scapy/packet.py" ;,第186行,在 的 SETATTR self.setfieldval(ATTR,VAL)
文件" /usr/lib/pymodules/python2.6/scapy/packet.py" ;,第175行,在 setfieldval self.fields [attr] = any2i(self,val)
文件" /usr/lib/pymodules/python2.6/scapy/fields.py" ;,第785行,在any2i中 y | = 1<< self.names.index(ⅰ)ValueError:找不到子字符串
答案 0 :(得分:4)
在Scapy中设置TCP标志的正确方法是使用短(一个字母)形式packet[TCP].flags = 'R'
。使用Scapy的当前开发版本,您可以使用ls()
:
>>> ls(TCP, verbose=True)
sport : ShortEnumField = (20)
dport : ShortEnumField = (80)
seq : IntField = (0)
ack : IntField = (0)
dataofs : BitField (4 bits) = (None)
reserved : BitField (3 bits) = (0)
flags : FlagsField (9 bits) = (2)
F, S, R, P, A, U, E, C, N
window : ShortField = (8192)
chksum : XShortField = (None)
urgptr : ShortField = (0)
options : TCPOptionsField = ({})