python scapy的半连接端口扫描

原理简述:

端口扫描常见的一般有以下两种
  • 基于socket的connect全连接扫描(速度快,但是会在对方系统日志留下痕迹)
  • 基于scapy的SYN半连接扫描(不会被扫描的主机发现,速度慢。现在好像防火墙会有痕迹)

注意

  • connect全连接扫描,基于socket套接字的connect方法,它的参数是一个元组(ip, port),此扫描试图与每一个TCP端口进行“三次握手”通信。如果能够成功建立接连,则证明端口开发,否则为关闭。准确度很高。缺点:最容易被防火墙和IDS检测到,并且在目标主机的日志中会记录大量的连接请求以及错误信息。优点:另一优点是扫描速度快。如果对每个目标端口以线性的方式,使用单独的connect()调用,可以通过同时打开多个套接字,从而加速扫描。

  • SYN半连接扫描,扫描IP段的全部端口部分的实现,基于scapy构造SYN数据包向目标主机的一个端口发送连接请求,当我们收到SYN/ACK包后,不发送的ACK应答而是发送RST包请求断开连接。这样,三次握手就没有完成,无法建立正常的TCP连接,因此,这次扫描就不会被记录到系统日志中,但是可能会在防火墙上留下痕迹。

  • 1、Client发送SYN
    2、Server端发送SYN/ACK
    3、Client发送RST断开(只需要前两步就可以判断端口开放)

  • 1、Client发送SYN
    2、Server端回复RST(表示端口关闭)
    输入:
    是一个ip的list文件(按行存储的都可以),例如下面这样:

104.168.0.0/16,pcapname
104.28.0.0/16,pcapname
134.29.0.0/16,pcapname
21.61.127.231,pcapname_port
221.17.0.0/16,pcapname
23.25.36.58,pcapname_port

输出:
对应的IP和开放的PORT及其pcapname和扫描时间插入mysql,日志输出

  1. 单个ip进行全端口扫描或指定端口扫描(日志输出,mysql插入,和传入的pcap包的name解析)
# 单个IP全端口扫描
import time  
import socket  
import threading 
from scapy.all import *
  

class SingelIP_Scan:
    def connScan(self, tgtHost, tgtPort, name):  
        try:  
            # SYN扫描
            syn = IP(dst=tgtHost)/TCP(dport=tgtPort, flags=2)
            result_raw = sr(syn, iface='enp6s0f0', timeout=1, verbose=False)  # Linux下少了iface参数,需要加上
            result_list = result_raw[0].res
            for i in range(len(result_list)):
                if result_list[i][1].haslayer(TCP):
                    TCP_fields = result_list[i][1].getlayer(TCP).fields
                    if TCP_fields['flags
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值