广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现端口扫描器的示例代码
  • 944
分享到

Python实现端口扫描器的示例代码

Python端口扫描器 2022-06-02 22:06:43 944人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录Socket概念 socket基本用法 创建tcp套接字 实现端口扫描 socket概念 socket又称套接字,可以看做是不同主机之间的进程进⾏双向通信的端点,简单的说就是通信的两⽅

目录
  • Socket概念
  • socket基本用法
  • 创建tcp套接字
  • 实现端口扫描

socket概念

socket又称套接字,可以看做是不同主机之间的进程进⾏双向通信的端点,简单的说就是通信的两⽅的⼀种约定,⽤套接字中的相关函数来完成通信过程,发出网络请求或者应答网络请求。

socket起源于Unix,⽽Unix/linux基本哲学之⼀就是"⼀切皆⽂件",对于⽂件⽤"打开"、"读写"、"关闭"模式来操作。而socket就是该模式的⼀个实现,说白了socket就是⼀种特殊的⽂件,⼀些socket函数就是对其进⾏的操作,包括读/写io、打开、关闭等。

socket基本用法

python 中,我们使用socket()函数来创建套接字,语法格式如下:


import socket
socket.socket(family, type)

函数socket.socket创建一个socket套接字,该函数带有两个参数:

  • 参数⼀:family(地址簇),可供选择的有socket.AF_INET(默认) 为IPv4,socket.AF_INET6,为IPv6,还有socket.AF_UNIX,为UNIX域协议族,只能够⽤于单⼀的Unix系统进程间通信。
  • 参数⼆:type(socket类型),如socket.SOCK_STREAM为TCP(默认),SOCK_DGRAM为UDP。

创建tcp套接字


import socket 
# 创建tcp的套接字 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ...这⾥是使⽤套接字的功能(省略)... 
# 关闭套接字
s.close()

创建udp套接字


import socket

# 创建udp的套接字 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
# ...这⾥是使⽤套接字的功能(省略)... 
# 不⽤的时候,关闭套接字 
s.close()

socket内建方法

函数 描述
服务器端套接字
s.bind() 绑定地址(host, port)到套接字, 在AF_INET下,以元组(host, port)的形式表示地址。
s.listen() 开始TCP监听。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量,该值⾄少为1。
s.accept() 被动接受TCP客户端连接,(阻塞式)等待连接的到来。
客户端套接字
s.connect() 主动初始化TCP服务器连接,。⼀般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。
s.connect_ex() connect()函数的扩展版本,出错时返回出错码,⽽不是抛出异常。
公共⽤途的套接字函数
s.recv() 接收TCP数据,数据以字符串形式返回,bufsize指定要接收的最⼤数据 量。flag提供有关消息的其他信息,通常可以忽略。
s.send() 发送TCP数据,将string中的数据发送到连接的套接字。返回值是要发送 的字节数量,该数量可能⼩于string的字节⼤⼩。
s.sendall() 完整发送TCP数据,完整发送TCP数据。将string中的数据发送到连接的 套接字,但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。
s.recvfrom() 接收UDP数据,与recv()类似,但返回值是(data,address)。其中data 是包含接收数据的字符串,address是发送数据的套接字地址。
s.sendto() 发送UDP数据,将数据发送到套接字,address是形式为(ipaddr, port)的元组,指定远程地址。返回值是发送的字节数。
s.close() 关闭套接字
s.getpeername() 返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。
s.getsockname() 返回套接字⾃⼰的地址。通常是⼀个元组(ipaddr,port) 。
s.setsockopt(level,optname,value) 设置给定套接字选项的值。
s.getsockopt(level,optname,buflen) 返回套接字选项的值。
s.settimeout(timeout) 设置套接字操作的超时期,timeout是⼀个浮点数,单位是秒。值为 None表示没有超时期。⼀般,超时期应该在刚创建套接字时设置,因为 它们可能⽤于连接的操作(如connect())
s.gettimeout() 返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None。 s.fileno()
s.setblocking(flag) 如果flag为0,则将套接字设为⾮阻塞模式,否则将套接字设为阻塞模式 (默认值)。⾮阻塞模式下,如果调⽤recv()没有发现任何数据,或 send()调⽤⽆法⽴即发送数据,那么将引起socket.error异常。
s.makefile() 创建⼀个与该套接字相关连的⽂件。

实现端口扫描

了解了socket及socket相关函数之后,我们就来实现一个端口扫描的小工具

所谓端口扫描,就是对指定服务器地址的指定端口进行扫描,通过扫描结果就可以知道一台计算机上都开放了哪些端口,如果你懂一些漏洞知识或者黑客攻击的话,就可以通过开放端口进行攻击,甚至有些很厉害的黑客,通过一个不起眼的端口,就能造成整个局域网内所有的主机沦陷。当然,我们学习的目的,不是为了攻击。

端口扫描的原理:向远端指定服务器的某一个端口提出建立一个连接的请求,如果对方有此项服务,就会应答,如果对方没有此项服务时,对方就无应答。利用这个原理,我们可以指定一些端口,然后针对这些接口分别建立连接,并获取对方是否应答,便可知道对方哪些端口是开放的。

上面我们说了socket.connect_ex((ip, port)),调用该函数对指定ip和端口发出连接请求,如果返回0则证明该端口是开放的,返回错误代码说明该接口是不开放的。
下面是端口扫描程序的代码:


import socket
from datetime import datetime
from multiprocessing.dummy import Pool as ThreadPool


class ScanPort:
    def __init__(self):
        self.ip = None

    def scan_port(self, port):
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            res = s.connect_ex((self.ip, port))
            if res == 0:  # 端口开启
                print('Ip:{} Port:{} IS OPEN'.fORMat(self.ip, port))
            else:
                print('Ip:{} Port:{}: IS NOT OPEN'.format(self.ip, port))
        except Exception as e:
            print(e)
        finally:
            s.close()

    def start(self):
        remote_server = input("输入要扫描的远程主机:")
        self.ip = socket.gethostbyname(remote_server)
        ports = [i for i in range(1, 1025)]
        socket.setdefaulttimeout(0.5)
        # 开始时间
        t1 = datetime.now()
        # 设置多进程
        threads = []
        pool = ThreadPool(processes=8)
        pool.map(self.scan_port, ports)
        pool.close()
        pool.join()

        print('端口扫描已完成,耗时:', datetime.now() - t1)


ScanPort().start()

加入了线程池,加快了运行速度。

到此这篇关于Python实现端口扫描器的示例代码的文章就介绍到这了,更多相关Python 端口扫描器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python实现端口扫描器的示例代码

本文链接: https://www.lsjlt.com/news/11194.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python实现端口扫描器的示例代码
    目录socket概念 socket基本用法 创建tcp套接字 实现端口扫描 socket概念 socket又称套接字,可以看做是不同主机之间的进程进⾏双向通信的端点,简单的说就是通信的两⽅...
    99+
    2022-06-02
    Python 端口扫描器
  • Python实现简易端口扫描器代码实例
    在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧。 #coding=utf-8 import socket import time import sys impor...
    99+
    2022-06-04
    扫描器 端口 简易
  • go 实现简易端口扫描的示例
    我在代码里定义了两个通道,分别用于生产端口和限制连接数,如果不限制连接数,容易被对方检测到或导致对方服务器不能正常运行。 // 生产端口 var port = make(chan...
    99+
    2022-11-12
  • python实现的多线程端口扫描功能示例
    本文实例讲述了python实现的多线程端口扫描功能。分享给大家供大家参考,具体如下: 下面的程序给出了对给定的ip主机进行多线程扫描的Python代码 #!/usr/bin/env python #en...
    99+
    2022-06-04
    示例 多线程 功能
  • Pyhacker实现端口扫描器
    目录00x1:需要用到的模块00x2:创建socket对象00x3:处理ip00x4:测试用例00x5:设定扫描端口00x6:完整代码主要是以Nmap举例编写,其中涉及的协议暂不过多...
    99+
    2022-11-13
  • 利用Python实现端口扫描器的全过程
    目录socket概念 socket基本用法 创建tcp套接字 创建udp套接字 socket内建方法实现端口扫描 总结socket概念 socket又称套接字,可以看做是不同主机之...
    99+
    2022-11-12
  • python实现web邮箱扫描的示例(附源码)
    目录基本思路该脚本所需要的一些库获取扫描目标对网页进行邮箱地址爬取(100条)通过锚点进入下一网页继续搜索完整代码实验………………信息收集是进行渗透测试的关键部分,掌握大量的信息对于...
    99+
    2022-11-12
  • C# 基于TCP 实现扫描指定ip端口的方式示例
    目录一、单线程扫描1.代码2.界面3.结果4.抓包二、多线程扫描1.代码2.界面3.结果4.抓包三、总结四、源码1.github2.gitee一、单线程扫描 1.代码 using...
    99+
    2022-11-12
  • Python利用socket实现多进程的端口扫描器
    作为开发人员经常需要查看服务的端口开启状态判断服务是否宕机。 特别是部署的服务比较多的情况下,可能存在几个甚至几十个服务端口的占用,于是我利用socket不断向服务发送请求的方式来判...
    99+
    2022-12-08
    Python socket多进程端口扫描 Python socket 端口扫描 Python 端口扫描
  • Python利用tkinter和socket实现端口扫描
    目录题目参考code题目 请设计并实现一款主机端口扫描程序。程序根据用户输入的域名或IP地址,可以查询该主机的开放的端口号。 例如: 并有一定的异常处理 参考code impor...
    99+
    2022-12-08
    Python tkinter socket端口扫描 Python socket端口扫描 Python 端口扫描
  • 使用Python编写简单的端口扫描器的实例分享
    单线程实现 单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务。随便修改了一下就ok了,代码如下,最终得到自己的IP地址。 #!/usr/bin/env...
    99+
    2022-06-04
    扫描器 端口 实例
  • VuePC端实现扫码登录功能示例代码
    目录需求描述思路解析前端功能实现如何控制二维码的时效性?前端如何获取服务器二维码的状态?本篇文章给大家带来了关于Vue的相关知识,其中主要介绍了在PC端实现扫码的原理是什么?怎么生成...
    99+
    2023-01-28
    Vue PC端扫码登录 Vue 扫码登录 vue登录功能
  • Python怎么用tkinter和socket实现端口扫描
    这篇文章主要介绍“Python怎么用tkinter和socket实现端口扫描”,在日常操作中,相信很多人在Python怎么用tkinter和socket实现端口扫描问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-04
  • 基于C#如何实现端口扫描器
    这篇文章给大家分享的是有关基于C#如何实现端口扫描器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、新建项目并设置界面新建项目:选择Windows窗体项目应用(.Net Framework):设置项目名和路径:...
    99+
    2023-06-21
  • 用Python实现一个端口扫描,只需简单
    0、秘密扫描 秘密扫描是一种不被审计工具所检测的扫描技术。 它通常用于在通过普通的防火墙或路由器的筛选(filtering)时隐藏自己。 秘密扫描能躲避IDS、防火墙、包过滤器和日志审计,从而获取目标端口的开放或关闭的信息。由于没有包含...
    99+
    2023-01-30
    只需 简单 端口扫描
  • python+selenium 实现扫码免密登录示例代码
    目录一、需求描述二、首先扫码登录获取cookies保存到本地未后面免密登录做准备三、初始化浏览器四、获取本地保存的cookies实现登录一、需求描述 web 自动化测试/python...
    99+
    2022-11-11
  • SpringBoot实现扫码登录的示例代码
    目录一、首先咱们需要一张表二、角色都有哪些三、接口都需要哪些?四、步骤五、疯狂贴代码Spring Boot中操作WebSocket最近有个项目涉及到websocket实现扫码登录,看...
    99+
    2022-11-13
  • 一文详解Go如何实现端口扫描器
    本篇文章给大家带来了关于Go的相关知识,其中主要跟大家介绍Go怎么实现端口扫描器,有代码示例,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。利用 GO 批量扫描服务器端口1、端口扫描器 V1 - 基本操作package mainimpo...
    99+
    2023-05-14
    Go
  • python中扫描条形码和二维码的实现代码
    简单说明,代码太难懂,先做此记录留待来日在看 步骤: 1,pip install pyzbar安装好该模块。pyzbar模块是Python一个开源库用于扫描和识别二维码信息。 2,...
    99+
    2022-11-12
  • 用Python编写一个高效的端口扫描器
    PyPortScanner Github 背景 具体实现 I 利用TCP握手连接扫描一个给定的ipport地址对 II 多线程扫描端口 III 多线程扫描多个网站 IV 总结利用这些代码扫描给定网站并输出结果 ...
    99+
    2023-01-31
    扫描器 高效 端口
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作