基于python开发端口扫描工具

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

一.前言

1.关于本人

本人仍然还在学习阶段,有问题欢迎大佬指正,希望我的文章能够帮助到你.以后我很多东西都会在博客更新,和大家一起进步,加油.

2.主题介绍

本次博客主要是开发一个端口扫描工具,用python语言,要求要能指定ip,指定c段,指定端口号和端口范围,还有多线程或者线程池实现,提高端口扫描效率.最重要的是掌握一些python的知识点,一些思路和提高python编程能力.

3.涉及的知识点

  • argparse模块:python用于解析命令行参数和选项的标准模块
  • os模块:python中执行cmd命令
  • ping命令参数
  • ThreadPoolExecutor模块:提高效率
  • socket编程:端口扫描的核心代码
  • 列表字符串等基础知识
  • c段扫描

二.程序代码与结果

1.核心代码:

import os
import socket
import sys
import argparse
import time
from threading import Thread
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
#端口扫描
def scan(ip,port):
        try:
                #for port in range(1, 65536):
                    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                    sock.settimeout(1)
                    result = sock.connect_ex((ip, port))
                    if result == 0:
                        print("Port: {} Open".format(port))
                    sock.close()
        except KeyboardInterrupt:
                sys.exit()
#指定端口
def sport(ip,port):
        # 指定特定端口
        if("," in port):
            ports=port.split(',')
            for p in ports:
                p=int(p)
                scan(ip,p)
        #指定端口范围
        elif("-" in port):
            ports=port.split('-')
            start=int(ports[0])
            end=int(ports[1])
            with ThreadPoolExecutor(100) as t:
             for p in range(start,end):
                 t.submit(scan, ip=ip, port=p)
        #单个端口
        else:
            scan(ip,int(args.port))
#探测ip存活
def check_ip(ip):
    check = os.popen(f"ping {ip} -w 1 -n 1")
    data=check.read()
    if("TTL" in data):
        return True;

parser = argparse.ArgumentParser()
#ip为必填:python scan.py ip
parser.add_argument('ip',type=str,help="give your ip")
#可以指定端口号,也可以指定端口范围
# (1)不指定-p,默认就是全端口扫描
# (2)指定特定的端口号,例如指定80和3306端口 -p 80,3306
# (3)可以指定端口范围,例如0-3306 -p 0-3306
# (4)指定一个端口:例如只扫描445端口,-p 445
parser.add_argument('-p','--port',type=str,help="give your port")
args = parser.parse_args()
ip=args.ip
if("/" in ip):
    ips = ip.split('.')
    ip=ips[0]+"."+ips[1]+"."+ips[2]+"."
    for i in range(1,254):
        ip = ips[0] + "." + ips[1] + "." + ips[2] + "."
        ip=ip+str(i)
        if(check_ip(ip)):
            print(ip+":")
            if args.port:
                port = args.port
                sport(ip, port)
            else:
                with ThreadPoolExecutor(100) as t:
                    for port in range(1, 65536):
                        t.submit(scan, ip=ip, port=port)
else:
    if(check_ip(ip)):
        print(ip+":")
        if args.port:
            port=args.port
            sport(ip,port)
        #全端口扫描
        else:
            with ThreadPoolExecutor(100) as t:
                for port in range(1,65536):
                    t.submit(scan,ip=ip,port=port)
    else:
        print("网络不可达")

2.运行结果

(1).单个ip,默认是全扫描

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(2).单个ip,指定特定的端口

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

 python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(3).单个ip,指定端口范围

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(4)扫描c段,指定特定的端口

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(5)扫描c段,指定端口范围

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

三.知识点

1.argparse模块:python用于解析命令行参数和选项的标准模块

(1)首先创建解析器

parser = argparse.ArgumentParser()

(2)添加必选参数:

add_argument方法添加参数

ip是必须有的,没填就会报错,且前面不用任何参数

parser.add_argument('ip',type=str,help="give your ip")

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(3)添加可选参数:

parser.add_argument里面的参数加上--或者-,或者两个都加

parser.add_argument('-p','--port',type=str,help="give your port")

-p或者-port可填可不填

(4)获取参数:

parse_args方法:获得所有参数

args = parser.parse_args() #此时args有所有输入的参数

args.ip #获得ip参数

args.port #获取port参数

(5)对应的代码:

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(6)更详细的学习:

Argparse 教程 — Python 3.10.2 文档

2.c段扫描

(1)c段

通俗来讲,就是例如192.168.0.0/24,就是192.168.0.1-192.168.0.254,前面24位不用变,最后8位改变.

(2)c段扫描的原理

由于c段主机比较多,所以在进行端口扫描时,最好先探测一下c段有什么主机哪些存活,再对c段存活的主机进行端口扫描,这样效率就比较快了.探测存活主机的方法,这里是使用ping命令,ping得到的主机就是存活主机,且ping通的主机都有TTL,程序可以根据有无TTL值来判断是否ping通

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(3)对应代码:

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

3.ping命令参数

(1)ping命令时间问题:

ping 得到存活的主机速度比较快,但是ping到没有存活的主机速度比较慢

ping存活不到的主机要18秒,太慢了

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(2)ping命令参数:

查看ping命令参数

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(3)ping命令使用参数改进:

最主要的是-n和-w

我们可以使用-n参数,只显示一条回显结果 -n 1

我们还可以使用-w参数,设置超时时间为 -w 1

测试结果:时间快了好多

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

(4)对应代码:

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

4.os模块:python中执行cmd命令

(1)os模块执行cmd命令的方法:

  • os.system(cmd)

这个方法在执行的时候,它会自动的打开一个终端,并且无法对cmd命令中执行的结果进行保存,简单的说就是使用这个方法,可以在一个脚本中对cmd进行执行操作

  • os.popen(cmd,mode)

这个方法是使用是对一个cmd进程中的管道进行打开操作它会返回一个文件对象,读写模式根据mode决定,可以是读也可以是写,如果mode为'r',可以使用此函数的返回值调用read()来获取cmd命令的执行结果。

所以为了读取执行结果,一般使用os.popen

(2)对应代码:

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

5.socket编程:端口扫描的核心代码

(1)创建socket对象

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

socket.AF_INET是服务器之间网络通信

SOCK_STREAM是基于TCP连接的

(2)设置超时时间

sock.settimeout(1)

(3)连接对方的ip加端口

使用connect_ex方法,如果结果为0,说明对方ip+端口是存在的,端口扫描也是基于这个来处理的

result = sock.connect_ex((ip, port))

if result == 0:

print("Port: {} Open".format(port))

(4)关闭socket:

sock.close()

(5)涉及代码:

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络

6.ThreadPoolExecutor模块:线程池提高效率

(1)导入模块:

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor

(2)线程池解析:

with ThreadPoolExecutor(100) as t: #创建100个线程的线程池

for port in range(1,65536): #有这么多个任务

t.submit(scan,ip=ip,port=port) #调用的函数以及参数

所以函数体内尽量实现功能即可,for循环可以在外部做,这样效率就比较高

(3)对应代码:

python 端口扫描器,工具开发,python,开发语言,安全,网络安全,网络文章来源地址https://www.toymoban.com/news/detail-761076.html

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

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

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

相关文章

  • 1.3端口扫描:利用Nmap工具进行端口扫描

    1、预备知识:Nmap介绍         nmap的功能:端口扫描、主机发现、服务/版本识别、操作系统识别、网络路由跟踪、Nmap脚本引擎;         nmap的扫描方式:Half-open scanning,默认扫描方式;TCP connect;TCP ACK scanning;TCP FIN/Xmass/NULL scanning。 2、实验条件:         攻击机:

    2024年02月06日
    浏览(57)
  • 御剑高速TCP端口扫描工具

    鉴于CSDN平台想恰钱想疯了,连下载个软件也要付费/VIP  那我在这里就无私贡献出珍藏的——御剑高速TCP端口扫描工具 网址:百度网盘 请输入提取码 提取码:7fk6  

    2024年02月13日
    浏览(52)
  • 端口扫描工具 NMAP使用详解,收藏这一篇就够了

    前言 为了保护计算机不受攻击和各种病毒、木马的侵扰,其实我们可以在网络设备上采取措施,对某些数据包进行阻挡、过滤等,但重要的还是用户需要有一定的意识,采取措施对自己的计算机进行保护安全; 那么,今天主要想跟大家分享的是在 Linux 操作系统下除了使用

    2024年02月04日
    浏览(39)
  • python-nmap库使用教程(Nmap网络扫描器的Python接口)(功能:主机发现、端口扫描、操作系统识别等)

    Python-nmap是一个Python库,用于帮助进行网络扫描。它是Nmap网络扫描器的Python接口,允许开发者从Python脚本中直接调用Nmap的功能。这篇文章将详细介绍如何使用python-nmap库来执行各种网络扫描任务。 在开始之前,需要确保安装了Nmap和python-nmap库。可以通过以下命令安装Nmap: 对

    2024年02月21日
    浏览(47)
  • Say0l的安全开发-弱口令扫描工具-My-crack【红队工具】

    终于终于,安全开发也练习一年半了,有时间完善一下项目,写写中间踩过的坑。 安全开发的系列全部都会上传至 github ,欢迎使用和 star 。 https://github.com/SAY0l/my-crack 更适合中国宝宝的弱口令扫描器 当前核心支持 ftp/mongodb/mysql/mssql/postgre/redis/ssh 的弱口令扫描 提供了编译后

    2024年02月09日
    浏览(41)
  • Nmap扫描器主机、端口、版本、OS、漏洞扫描基本用法

    操作系统:kali 1、批量Ping扫描:  批量扫描一个网段的主机存活数。 扫描IP地址范围:  可以指定一个IP地址范围   2、跳过Ping探测:   有些主机关闭了ping检测,所以可以使用 -P0 跳过ping的探测,可以加快扫描速度。 3、计算网段主机IP  -sL      仅列出指定网段上的每台主机,不

    2024年02月11日
    浏览(56)
  • 【Python】构造数据包Scapy——网络扫描、攻击工具

    库 :是Python的一个库,独立运行的工具(在Linux中,将scapy当作一个独立的工具来使用,可以不依赖Python) 使用场景 :网络扫描、攻击工具 可以在自己程序中实现对网络数据包的发送、监听、解析,构建能够进行探测、扫描、攻击的网络工具。 Scapy是可以直接操作到数据包

    2024年02月03日
    浏览(38)
  • Portscan一款局域网端口扫描器

          Portscan是一款局域网端口扫描器,可以用于扫描目的主机的开放端口,并猜测目的主机的操作系统,支持Edge、Wi-Fi和3G网络。打开PortScan软件后默认会帮你填好超始IP及端口号,结束IP可以自已根据需求填写好,然后扫描即可。       它能够帮助用户查找网络中正在

    2024年02月13日
    浏览(55)
  • 分析某款go端口扫描器之三

    前两篇主要分析些工具集,已经针对web服务的指纹和端口指纹信息进行识别,并没有真正开始扫描。本篇主要分析如何进行IP存活探测以及tcp扫描实现。 项目来源:https://github.com/XinRoom/go-portScan/blob/main/util/file.go 此代码主要是用来进行主机存活的。 首先设置判断变量和常见端

    2024年02月04日
    浏览(45)
  • 基于Spring包扫描工具和MybatisPlus逆向工程组件的数据表自动同步机制

    公司产品产出的项目较多。同步数据库表结构工作很麻烦。一个alter语句要跑到N个客户机上执行脚本。超级费时麻烦。介于此,原有方案是把增量脚本放到一resource包下,项目启动时执行逐行执行一次。但由于模块开发人员较多,总有那么一两个机灵鬼漏写脚本。加上项目分

    2024年02月15日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包