python3-端口扫描(TCP connect扫描,SYN扫描,FIN扫描)

这篇具有很好参考价值的文章主要介绍了python3-端口扫描(TCP connect扫描,SYN扫描,FIN扫描)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

利用python3进行端口扫描,TCP的方式有connect扫描,SYN扫描,FIN扫描,NULL扫描,ACK扫描,Xmas,windows扫描。本次展示前三种,代码仅供参数:

  • 扫描方式 1:TCP connect扫描

扫描端与目标主机建立tcp连接,完成三次握手后,扫描端主动关闭连接(缺点:目标主机会记录下连接内容)

# -*- coding: utf-8 -*-
import queue
import socket
import threading

'''
功能介绍:
    通过TCPconnect进行端口扫描,需要用户输入ip,port,线程数(默认10)
函数介绍:
    Portscan_print(ip)                              #结果排序打印
    Portscan_Threadfun(ip)                          #线程分配函数
    Portscan_TCPconnect(ip, p)                      #扫描功能实现
    Portscan_threadnum(ip,num=10)                   #控制线程数量
    Portscan_portlist(ip,userport)                  #扫描端口处理
'''

def Portscan_Threadfun(ip):                         # 工具人
    while True:
        if q.empty():                               # 判断队列是否为空
            break
        else:
            port = q.get()                          # 取出一个端口
            Portscan_TCPconnect(ip, port)


def Portscan_TCPconnect(ip, p):                     # TCPconnect功能实现
    try:
        port = int(p)
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        if port == 3306 or port == 22 or port == 23 or port == 1521:
            s.settimeout(4)
        else:
            s.settimeout(1)
        s.connect((ip, port))
        openport_list.append(port)
    except Exception as e:
        closeport_list.append(port)
    finally:
        s.close()


def Portscan_print(ip):                             # 打印函数,排序
    openport_list.sort()
    for i in openport_list:
        print(ip + "\t" + str(i) + " Open\t\t")
    closeport_list.sort()
    for i in closeport_list:
        print(ip + "\t" + str(i) + " Close")


def Portscan_threadnum(ip, num=10):                 # 控制线程函数
    thread_joinlist = []
    for i in range(0, num):                         # 控制线程数
        new_thread = threading.Thread(target=Portscan_Threadfun, args=(ip,))
        new_thread.start()
        thread_joinlist.append(new_thread)
    for i in thread_joinlist:
        i.join()                                    # 循环等待每个线程完成任务,之后在进行打印工作


def Portscan_portlist(ip, threadnum, userport=0):   # 端口处理函数
    global q
    global openport_list
    global closeport_list
    q = queue.Queue()
    openport_list = []
    closeport_list = []
    if userport:
        if ',' in userport:
            ports = userport.split(',')
        elif '-' in userport:
            ports = userport.split('-')
            tmpports = []
            [tmpports.append(i) for i in range(int(ports[0]), int(ports[1]) + 1)]
            ports = tmpports
        else:
            ports = [userport]
    else:
        print('Default Ports')
        ports = [21, 22, 23, 53, 80, 111, 139, 161, 389, 443, 445, 512, 513, 514,
                 873, 1025, 1433, 1521, 3128, 3306, 3311, 3312, 3389, 5432, 5900,
                 5984, 6082, 6379, 7001, 7002, 8000, 8080, 8081, 8090, 9000, 9090,
                 8888, 9200, 9300, 10000, 11211, 27017, 27018, 50000, 50030, 50070]
    [q.put(i) for i in ports]                       # 将端口加入queue队列
    Portscan_threadnum(ip, threadnum)
    Portscan_print(ip)                              # 打印输出函数


if __name__ == '__main__':
    ip = '104.193.88.77'
    userport = '443'
    threadnum = 20
    Portscan_portlist(ip, threadnum, userport)
  • 扫描方式 2:SYN扫描

扫描主机主动向目标主机指定端口发送SYN数据,表示建立连接请求,如果目标主机回应SYN+ACK,说明端口活动。回复RST说明目标端口不存活。接着扫描主机回一个RST给目标主机拒绝连接。导致三次握手失败(不会留下连接记录)

# -*- coding: utf-8 -*-
import queue
import threading
from scapy.sendrecv import sr
from scapy.layers.inet import IP, TCP

'''
功能介绍:
    通过TCPSYN进行端口扫描,需要用户输入ip,port,线程数(默认10)
'''


def Portscan_Threadfun(ip):                         # 工具人
    while True:
        if q.empty():                               # 判断队列是否为空
            break
        else:
            port = q.get()                          # 取出一个端口
            Portscan_SYN(ip, port)


def Portscan_SYN(ip, port):
    try:
        temp = sr(IP(dst=ip) /
                  TCP(dport=(int(port)), flags='S'),
                  timeout=2, verbose=False)
        if temp[0].res:
            result = temp[0].res                    # temp分回复和无回显
            if (result[0][1].payload.flags) == 'SA':
                print('端口开放')
                openport_list.append(port)
                return 1
            else:
                closeport_list.append(port)
        else:
            closeport_list.append(port)
            return 0
    except:
        closeport_list.append(port)
        return 0

def Portscan_print(ip):                             # 打印函数,排序
    openport_list.sort()
    for i in openport_list:
        print(ip + "\t" + str(i) + " Open\t\t")
    closeport_list.sort()
    for i in closeport_list:
        print(ip + "\t" + str(i) + " Close")


def Portscan_threadnum(ip, num=10):                 # 控制线程函数
    thread_joinlist = []
    for i in range(0, num):                         # 控制线程数
        new_thread = threading.Thread(target=Portscan_Threadfun, args=(ip,))
        new_thread.start()
        thread_joinlist.append(new_thread)
    for i in thread_joinlist:
        i.join()                                    # 循环等待每个线程完成任务,之后在进行打印工作

def Portscan_synport(ip,userport,threadnum=50):
    global q
    global openport_list
    global closeport_list
    openport_list = []
    closeport_list = []
    q = queue.Queue()
    if userport:
        if ',' in userport:
            ports = userport.split(',')
        elif '-' in userport:
            ports = userport.split('-')
            tmpports = []
            [tmpports.append(i) for i in range(int(ports[0]), int(ports[1]) + 1)]
            ports = tmpports
        else:
            ports = [userport]
    else:
        print('Default Ports')
        ports = [21, 22, 23, 53, 80, 111, 139, 161, 389, 443, 445, 512, 513, 514,
                 873, 1025, 1433, 1521, 3128, 3306, 3311, 3312, 3389, 5432, 5900,
                 5984, 6082, 6379, 7001, 7002, 8000, 8080, 8081, 8090, 9000, 9090,
                 8888, 9200, 9300, 10000, 11211, 27017, 27018, 50000, 50030, 50070]

    [q.put(i) for i in ports]                           #将端口加入队列
    Portscan_threadnum(ip,threadnum)
    Portscan_print(ip)



if __name__ == '__main__':
    ip = '192.168.0.110'
    port = '400-500'
    Portscan_synport(ip,port)
  • 扫描方式 3:FIN扫描

FIN扫描和NULL扫描类似,将标志位FIN置1,如果端口开放,则没有反应,端口关闭,目标主机会发送RST,同样在windows上不适用文章来源地址https://www.toymoban.com/news/detail-403473.html

from scapy.layers.inet import IP, TCP
from scapy.sendrecv import sr, sr1

'''
适用于Linux设备
通过设置flags位为'FIN',不回复则表示端口开启,回复并且回复的标志位为RST表示端口关闭
'''
def fin_scan(ip, port):
    p = IP(dst=ip) / TCP(dport=int(port), flags="F")
    ans = sr1(p, timeout=1, verbose=1)
    print(ans)
    if ans == None:
        print(ip, "port", port, "is open.")
    elif ans != None and ans[TCP].flags == 'RA':
        ans.display()
        print(ip, "port", port, "is closed.")

if __name__ == '__main__':
    ip = '192.168.0.112'
    port = 55
    fin_scan(ip,port)

到了这里,关于python3-端口扫描(TCP connect扫描,SYN扫描,FIN扫描)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 粉丝提问:设计和实现一个TCP协议半连接的端口扫描程序

    某学生粉丝发来问题: 这个题目一看就知道这位同学是网络安全相关专业。 很多粉丝以为彭老师知识搞驱动的, 但是其实作为一个拥有多篇网络协议专利的老鸟, 网络知识还是比较擅长的! 应用层套接字、组网、网卡驱动都有所涉猎, 目前还缺Linux内核协议栈这块没深入

    2023年04月14日
    浏览(34)
  • 麒麟服务器漏洞扫描提示端口:9090/tcp/www 不信任的证书

    国产服务器漏洞扫描报中危,但是9090端口应用没有使用,tongweb也没有使用。 后来发现是麒麟自带一个管理系统COCKPIT,https://ip:9090. 厂家确认: 服务器系统,9090端口是 cockpit 相关的,如果不想出现,可以关闭 cockpit 相关的两个服务。 如果想体验,可以在浏览器输入   https

    2024年02月16日
    浏览(27)
  • 详解【计算机类&面试真题】军队文职考试——第8期:OSI的七层模型 | 数据通信的三种方式 | 通信网络的检查方法,附Python进行网络连通性检查、带宽测试、端口扫描、链路质量测试、安全性扫描

      不知道命运是什么,才知道什么是命运。———史铁生     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质创作者🏆

    2024年01月25日
    浏览(38)
  • 通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect.......

    第一步:打开 SQL Server 配置管理器  第二步:点击SqlServer网络配置,点击 TCP/IP,右键属性,点击启用。 确定IP是1433 第三步:启动 MSSQLSERVER服务。 第四步: 如果MSSQLSERVER在这个服务是运行状态,一定要重启这个服务。    第五步:搞定了。

    2024年02月15日
    浏览(24)
  • 基于pyqt5+scapy 根据ip 具体端口 进行扫描 的程序

    先给出代码 实现做好ui 界面 后与python相连接  导入 相应的扫描程序  下面给出:有点缝合怪的感觉

    2024年01月17日
    浏览(31)
  • 如何快速而准确地进行 IP 和端口信息扫描:渗透测试必备技能

    数据来源 1)IP反查域名 同IP网站查询,同服务器网站查询 - 站长工具 专业精准的IP库服务商_IPIP 2)域名查询IP IP/IPv6查询,服务器地址查询 - 站长工具 或直接 ping 一下域名就会返回IP  3)CDN 如果网站使用了CDN那我们查找到的ip也是属于CDN的ip没多大用处 4)判断CDN 多个地点

    2024年02月11日
    浏览(31)
  • 如何利用AppScan扫描H5页面,进行安全测试?

    前期项目组接触的都是Web安全测试,今天做安全测试的时候,有一个项目刚好有H5页面,用以前那种AppScan内置浏览器的探索方式是不行的,研究了下,可以使用外部设备进行探索。 AppScan有两种手动探索方式,一种是AppScan的内置浏览器探索,另外一种就是外部设备探索 ,以前

    2024年02月05日
    浏览(36)
  • Python3: 扫描库文件并获取版本号信息

    在 C/C++ 开发中使用了第三方库,具体说是 .a , .lib , .dll 等文件,想通过 Python 查询出这些文件中的版本号信息。 有人可能好奇,这里简单消除可能得疑虑: 为什么不用源代码,而用库? 因为库文件提供了良好的 隔离性 ,避免了繁杂的编译选项指定, 避免了潜在的不小心改

    2024年02月05日
    浏览(72)
  • 基于python开发端口扫描工具

    本人仍然还在学习阶段,有问题欢迎大佬指正,希望我的文章能够帮助到你.以后我很多东西都会在博客更新,和大家一起进步,加油. 本次博客主要是开发一个端口扫描工具,用python语言,要求要能指定ip,指定c段,指定端口号和端口范围,还有多线程或者线程池实现,提高端口扫描效率

    2024年02月04日
    浏览(28)
  • 如何利用Trimble RealWorks三维激光扫描仪进行外业测量和内业处理?

      笔者所在资源与环境工程学院实验室采购有一台Trimble RealWorks三维激光扫描仪(仪器名:Trimble TX8),因项目需要,在学校实验场地进行实地测量训练,相应的Trimble RealWorks数据处理软件资料来自Trimble经销商的网上软件使用直播培训视频(可访问哔哩哔哩:Trimble_Geo)。

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包