无状态扫描器Python简单实现

本文介绍了如何使用Python实现无状态TCP扫描,结合多线程技术整合收发包过程。通过填充特定cookie进行校验,避免误判。参照Masscan和ZMap的校验机制,设置了简单的序列号0x1111111111,并采用超时机制防止空等。
摘要由CSDN通过智能技术生成

无状态扫描器简单实现

本文参考Python的无状态SYN快速扫描一文:https://www.freebuf.com/sectool/125491.html

参考文章中讲解了原理,并对收发模块分别进行了实现,我们这里使用Python的threading模块将收发包整合。

无状态扫描是向目标主机发送SYN数据包后直接发送RST数据包取消连接,收发异步,收包程序只需要过滤出有SYN+ACK和RST的数据包即可。而此时问题也出现了,在一个活跃的主机中,各个程序一直在收发数据,收包程序过滤出的数据包无法判断究竟是目标主机返回的数据包还是本机其他程序通信的数据包,此时则需要一个校验机制。

由于我们可以自己构造TCP的数据包,所以可以将SEQ序列号填充含有特定验证信息的cookie。

Masscan是将源ip、源端口和目标ip、目标端口以及一个随机值经由散列函数生成cookie,作为TCP的SEQ发送,在接收时,先解析出源、目标的ip地址和端口号,还有flags、SEQ和ACK,用解析出的信息生成cookie。校验顺序为:是否源ip->是否源端口->是否SYN+ACK/RST->cookie是否正确(注意由于TCP,此时要验证的是ACK-1)->是否校验重复。

而ZMap是将对方的ip地址进行hash,将其处理保存到了sender port和seq number两个字段中,当SYN-ACK回来的时候,就可以根据sender ip、receiver port、ack number这些字段进行校验。

这里简单的将校验的序列号设置为0x1111111111,利用python的threading模块将收包与发包整合到同一程序内,发包模块作为主线程,收包模块作为守护线程,与此同时设置超时机制避免空等。

#-*- coding:UTF-8 -*-
from scapy.all import *
from netaddr import *
import threading
import time
import sys

class Dispacher(threading.Thread):
    def __init__(self,fun):               #初始化线程函数
        threading.Thread.__init__(self)   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值