iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python3制作TCP端口扫描器
  • 567
分享到

使用Python3制作TCP端口扫描器

扫描器端口TCP 2022-06-04 18:06:29 567人浏览 独家记忆

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

摘要

在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤。通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞。 tcp端口扫描

渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤。通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞。 tcp端口扫描一般分为以下几种类型:

TCP connect扫描:也称为全连接扫描,这种方式直接连接到目标端口,完成了TCP三次握手的过程,这种方式扫描结果比较准确,但速度比较慢而且可轻易被目标系统检测到。

TCP SYN扫描:也称为半开放扫描,这种方式将发送一个SYN包,启动一个TCP会话,并等待目标响应数据包。如果收到的是一个RST包,则表明端口是关闭的,而如果收到的是一个SYN/ACK包,则表示相应的端口是打开的。

Tcp FIN扫描:这种方式发送一个表示拆除一个活动的TCP连接的FIN包,让对方关闭连接。如果收到了一个RST包,则表明相应的端口是关闭的。

TCP XMAS扫描:这种方式通过发送PSH、FIN、URG、和TCP标志位被设为1的数据包。如果收到了一个RST包,则表明相应的端口是关闭的。

下面我们将使用python3 实现TCP全连接端口扫描器,下面进入编程环节。

编码实战

全连接扫描方式的核心就是针对不同端口进行TCP连接,根据是否连接成功来判断端口是否打开,现在我们来实现一个最简单的端口扫描器:


#!/usr/bin/python3
# -*- coding: utf-8 -*-
from Socket import *

def portScanner(host,port):
  try:
    s = socket(AF_INET,SOCK_STREAM)
    s.connect((host,port))
    print('[+] %d open' % port)
    s.close()
  except:
    print('[-] %d close' % port)

def main():
  setdefaulttimeout(1)
  for p in range(1,1024):
    portScanner('192.168.0.100',p)

if __name__ == '__main__':
  main()

这段代码的核心就是portScanner函数,从其中的内容可以看出,只是进行了简单的TCP连接,如果连接成功则判断为端口打开,否则视为关闭。 我们来看一下运行结果:

查看图片

这样的扫描看起来效率太低了,实际也确实很慢,因为我们设置了默认的超时时间为1秒,这要是扫描10000个端口,岂不是要等到花都谢了? 最简单的办法就是用多线程来提高效率,虽然Python的多线程有点太弱了,不过至少可以利用我们等待的时间去干点别的。另外之前扫描的端口比较多, 显示的信息我们看起来不方便,这次我们只显示我们关心的打开的端口,并将打开端口的数量在扫描结束的时候显示出来。


#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading

lock = threading.Lock()
openNum = 0
threads = []

def portScanner(host,port):
  global openNum
  try:
    s = socket(AF_INET,SOCK_STREAM)
    s.connect((host,port))
    lock.acquire()
    openNum+=1
    print('[+] %d open' % port)
    lock.release()
    s.close()
  except:
    pass

def main():
  setdefaulttimeout(1)
  for p in range(1,1024):
    t = threading.Thread(target=portScanner,args=('192.168.0.100',p))
    threads.append(t)
    t.start()   

  for t in threads:
    t.join()

  print('[*] The scan is complete!')
  print('[*] A total of %d open port ' % (openNum))

if __name__ == '__main__':
  main()

运行看一下效果,如下图:

查看图片

这下看起来是不是方便多了?至此效率上的问题解决了,现在我们还需要为扫描器增加一个 参数解析的功能,这样才能看起来像个样子,总不能每次都改代码来修改扫描目标和端口吧!

参数解析我们将用python3自带的标准模块argparse,这样我们就省去了自己解析字符串的麻烦! 下面来看代码:


#!/usr/bin/python3
# -*- coding: utf-8 -*-
from socket import *
import threading
import argparse

lock = threading.Lock()
openNum = 0
threads = []

def portScanner(host,port):
  global openNum
  try:
    s = socket(AF_INET,SOCK_STREAM)
    s.connect((host,port))
    lock.acquire()
    openNum+=1
    print('[+] %d open' % port)
    lock.release()
    s.close()
  except:
    pass

def main():
  p = argparse.ArgumentParser(description='Port scanner!.')
  p.add_argument('-H', dest='hosts', type=str)
  args = p.parse_args()
  hostList = args.hosts.split(',')
  setdefaulttimeout(1)
  for host in hostList:
    print('Scanning the host:%s......' % (host))
    for p in range(1,1024):
      t = threading.Thread(target=portScanner,args=(host,p))
      threads.append(t)
      t.start()   

    for t in threads:
      t.join()

    print('[*] The host:%s scan is complete!' % (host))
    print('[*] A total of %d open port ' % (openNum))

if __name__ == '__main__':
  main()

看一下运行效果,如下图:

查看图片

至此我们的端口扫描器就基本完成了,虽然功能比较简单,旨在表达端口扫描器的基本实现思路! 至于更详细的功能可以基于这个基本结构来逐步完善!

小结

本节主要讲解了Python3实现一个简单的端口扫描器的过程,本次实验采用了Tcp全连接的方式,不断尝试连接主机的端口来判断端口的开放情况,虽然存在一些缺点, 不过这种方式最适合初学者学习,至于更复杂的方式以后学习起来也不会很难。想举一反三的朋友可以根据协议和端口的对照关系来完成扫描时同时输出协议, 这样看起来会更好一些,至于更详细的功能就留给大家做练习了!

--结束END--

本文标题: 使用Python3制作TCP端口扫描器

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

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

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

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

下载Word文档
猜你喜欢
  • 使用Python3制作TCP端口扫描器
    在渗透测试的初步阶段通常我们都需要对攻击目标进行信息搜集,而端口扫描就是信息搜集中至关重要的一个步骤。通过端口扫描我们可以了解到目标主机都开放了哪些服务,甚至能根据服务猜测可能存在某些漏洞。 TCP端口扫描...
    99+
    2022-06-04
    扫描器 端口 TCP
  • GoLand编写TCP端口扫描器的详细过程
    目录Go 语言编写 TCP 扫描器TCPTCP握手非并发的 TCP 扫描器并发的 TCP 扫描器并发的 TCP 扫描器 - WORKER 池Go 语言编写 TCP 扫描器 TCP T...
    99+
    2023-05-19
    Go语言TCP 端口扫描器 TCP 端口扫描器 Go语言 端口扫描器
  • python使用nmap端口扫描
    第一版:只支持以逗号分隔的端口,不支持端口范围   Firstly:      sudo apt-get install nmapSecondly:pip install python-nmapThirdly:copy the code b...
    99+
    2023-01-31
    端口扫描 python nmap
  • Python项目实战:使用多线程进行TCP端口扫描
    前言今天为大家一个利用Python扫描开放主机的TCP端口,首先你要查看其中的开放的端口,创建一个TCP全连接扫描器,一般使用socket来创建连接器的,测试当前主机和端口是否开放,直接使用socket连接导入第三方库...
    99+
    2023-06-02
  • 怎么用Go语言打造一款简易TCP端口扫描器
    这篇文章主要介绍“怎么用Go语言打造一款简易TCP端口扫描器”,在日常操作中,相信很多人在怎么用Go语言打造一款简易TCP端口扫描器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • Python写安全小工具之TCP全连接端口扫描器
    目录一个简单的端口扫描器多线程版本前言: 通过端口扫描我们可以知道目标主机都开放了哪些服务,下面通过TCP connect来实现一个TCP全连接端口扫描器。 一个简单的端口扫描器 #...
    99+
    2022-11-11
  • Linux下如何使用nmap命令端口扫描
    这篇文章将为大家详细讲解有关Linux下如何使用nmap命令端口扫描,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。nmap命令也就是Network Mapper,是Linux下的网络扫描和嗅探工具包。 其...
    99+
    2023-06-28
  • Linux的nmap扫描端口命令怎么使用
    本篇内容介绍了“Linux的nmap扫描端口命令怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!nmap扫描端口命令是“nmap -s...
    99+
    2023-07-04
  • 利用Python实现端口扫描器的全过程
    目录socket概念 socket基本用法 创建tcp套接字 创建udp套接字 socket内建方法实现端口扫描 总结socket概念 socket又称套接字,可以看做是不同主机之...
    99+
    2022-11-12
  • 用Python编写一个高效的端口扫描器
    PyPortScanner Github 背景 具体实现 I 利用TCP握手连接扫描一个给定的ipport地址对 II 多线程扫描端口 III 多线程扫描多个网站 IV 总结利用这些代码扫描给定网站并输出结果 ...
    99+
    2023-01-31
    扫描器 高效 端口
  • 利用Python脚本写端口扫描器socket,python-nmap
    目录Socket模块编写扫描给定主机是否开放了指定的端口python-nmap模块编写 扫描给定ip或给定网段内指定端口是否开放前言: 一个用python写的简单的端口扫描...
    99+
    2022-11-11
  • Python利用socket实现多进程的端口扫描器
    作为开发人员经常需要查看服务的端口开启状态判断服务是否宕机。 特别是部署的服务比较多的情况下,可能存在几个甚至几十个服务端口的占用,于是我利用socket不断向服务发送请求的方式来判...
    99+
    2022-12-08
    Python socket多进程端口扫描 Python socket 端口扫描 Python 端口扫描
  • 使用Python编写简单的端口扫描器的实例分享
    单线程实现 单线程实现道理比较简单,这里尝试Soket连接3389,连接成功说明端口开放,否则说明没有开远程服务。随便修改了一下就ok了,代码如下,最终得到自己的IP地址。 #!/usr/bin/env...
    99+
    2022-06-04
    扫描器 端口 实例
  • dos中如何使用for命令扫描网段的端口
    这篇文章主要介绍了dos中如何使用for命令扫描网段的端口,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。不需要任何工具,dos命令扫描一个网段的全部端口!    在...
    99+
    2023-06-09
  • PyHacker编写指南引用Nmap模块实现端口扫描器
    目录编写:调试扫描:方法扫描端口输出状态:引用Nmap库实现扫描功能,本节课比较简单一看就会。 编写环境:Python2.x 编写: 首先安装Nmap程序,并添加环境变量 pip i...
    99+
    2022-11-13
  • 如何使用netcat命令对Linux和Unix进行端口扫描
    这篇文章给大家分享的是有关如何使用netcat命令对Linux和Unix进行端口扫描的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如何使用 nc 来扫描 Linux,UNIX 和 Windows 服务器的端口呢如...
    99+
    2023-06-16
  • 解决服务器外网无法访问,PHPWAMP端口扫描工具的使用
    服务器外网无法访问,阿里云服务器外网无法访问解决方案,腾讯云外网无法访问PHPWAMP集成环境支持nginx、iis、apache、支持asp、php、asp.net,内置了很多实用工具。服务器外网无法访问...
    99+
    2022-10-18
  • C#单线程和多线程的端口扫描器应用比较详解
    目录一、准备工作二、端口扫描器(单线程)三、端口扫描器(多线程)四、总结本文章使用C#编程,制作一个端口扫描器,能够扫描本机有哪些端口开放了,并显示出来,分别使用单线程和多线程进行了...
    99+
    2022-11-13
  • 高防服务器使用的TCP协议4种端口分别有什么作用
    高防服务器使用的TCP协议的常见端口的作用:1.FTP端口定义了文件传输协议,下载文件、上传主页等都需要用到FTP服务。2. Telnet端口是一种用于远程登陆的端口,可以通过这种端口可以提供一种基于DOS模式下的通信服务。3.SMTP端口...
    99+
    2022-10-23
  • 美国服务器使用TCP协议的端口有哪些
    美国服务器使用TCP协议的端口有:1、FTP,文件传输协议,使用21端口;2、Telnet,用于远程登陆的端口,使用23端口;3、SMTP,邮件传送协议,使用25端口;4、POP3,用于接收邮件,使用110端口。具体内容如下:FTP定义了文...
    99+
    2022-10-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作