python制作一个简单的端口扫描器,用于检测目标主机上指定端口的开放状态

import argparse  # 用于解析命令行参数
from socket import *  # 导入 socket 库的所有内容,用于网络通信
from threading import *  # 导入 threading 库的所有内容,用于多线程操作

# 创建一个信号量,初始值为 1,用于线程同步,防止多个线程同时打印导致输出混乱
screenLock = Semaphore(value=1)

# 定义 connScan 函数,用于扫描单个端口
def connScan(tgtHost, tgtport):
    try:
        # 创建一个 socket 对象,AF_INET 表示使用 IPv4,SOCK_STREAM 表示使用 TCP
        connSkt = socket(AF_INET, SOCK_STREAM)
        # 尝试连接到目标主机的指定端口
        connSkt.connect((tgtHost, tgtport))
        # 发送一个字符串,表示连接成功
        connSkt.send('ViolentPython\r\n'.encode())  
        # 接收返回的数据,最多接收 100 字节
        results = connSkt.recv(100)
        # 获取屏幕锁,确保打印输出时不会与其他线程冲突
        screenLock.acquire()
        # 打印端口开放的信息
        print(f'[+]{tgtport}/tcp open')
        # 打印接收到的数据
        print(f'[+]{results.decode("utf-8")}')  
    except:
        # 如果发生异常,获取屏幕锁并打印端口关闭的信息
        screenLock.acquire()
        print(f'[-]{tgtport}/tcp closed')
    finally:
        # 释放屏幕锁
        screenLock.release()
        # 关闭 socket 连接
        connSkt.close()

# 定义 portScan 函数,用于扫描多个端口
def portScan(tgtHost, tgtPorts):
    try:
        # 将目标主机名解析为 IP 地址
        tgtIP = gethostbyname(tgtHost)
    except:
        # 如果解析失败,打印错误信息并返回
        print(f"[-] Cannot resolve '{tgtHost}':Unknown host")
        return
    try:
        # 将 IP 地址解析为主机名
        tgtName = gethostbyaddr(tgtIP)
        # 打印扫描结果的标题
        print(f'\n[+]Scan Results for:{tgtName[0]}')
    except:
        # 如果解析失败,打印扫描结果的标题(使用 IP 地址)
        print(f'\n[+]Scan Results for:{tgtIP}')
    # 设置 socket 的默认超时时间为 1 秒
    setdefaulttimeout(1)
    # 遍历所有要扫描的端口
    for tgtPort in tgtPorts:
        # 为每个端口创建一个新的线程,调用 connScan 函数进行扫描
        t = Thread(target=connScan, args=(tgtHost, int(tgtPort)))
        t.start()

# 定义 main 函数,用于解析命令行参数并启动扫描
def main():
    # 创建一个命令行参数解析器
    parser = argparse.ArgumentParser(description='Port scanner usage')
    # 添加 -H 参数,用于指定目标主机
    parser.add_argument('-H', dest='tgtHost', type=str, help='specify target host')
    # 添加 -p 参数,用于指定要扫描的端口,端口之间用逗号分隔
    parser.add_argument('-p', dest='tgtPort', type=str, help='specify target port[s] separated by comma')
    # 解析命令行参数
    options = parser.parse_args()
    # 获取目标主机和端口
    tgtHost = options.tgtHost
    tgtPorts = options.tgtPort
    # 检查是否指定了目标主机和端口
    if tgtHost is None:
        print("请正确指定目标主机,使用 -H 参数输入目标主机信息。")
        exit(0)
    if tgtPorts is None:
        print("请正确指定目标端口,使用 -p 参数输入目标端口信息(多个端口用逗号隔开)。")
        exit(0)
    # 将端口字符串分割为列表
    tgtPorts = tgtPorts.split(',')
    # 调用 portScan 函数开始扫描
    portScan(tgtHost, tgtPorts)

# 如果直接运行这个脚本,则调用 main 函数
if __name__ == "__main__":
    main()

输出结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471208.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OceanStor Pacific系列 8.1.0 功能架构

功能架构 华为OceanStor Pacific系列提供基于三层的分布式存储架构,融合分布式文件、对象、大数据和块多个服务形态,支持文件、对象、大数据服务部署在一个集群,并统一管理。 华为OceanStor Pacific系列整体功能架构由存储接口层、存储服务…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹,并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

高效稳定!新加坡服务器托管方案助力企业全球化布局

在全球化的商业环境中,企业对于高效、稳定的服务器托管方案的需求日益迫切。作为亚洲的服务器托管中心,新加坡凭借其独特的地理位置、稳定的政治环境、先进的科技设施以及开放的市场政策,为企业提供了理想的服务器托管解决方案,助…

JavaWeb后端开发知识储备1

目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象,是用于传输数据的对象,通常在服务层与表现层之间传递数据,DTO 通常用于…

StructuredStreaming (一)

一、sparkStreaming的不足 1.基于微批,延迟高不能做到真正的实时 2.DStream基于RDD,不直接支持SQL 3.流批处理的API应用层不统一,(流用的DStream-底层是RDD,批用的DF/DS/RDD) 4.不支持EventTime事件时间(一般流处理都会有两个时间:事件发生的事件&am…

信号-3-信号处理

main 信号捕捉的操作 sigaction struct sigaction OS不允许信号处理方法进行嵌套:某一个信号正在被处理时,OS会自动block改信号,之后会自动恢复 同理,sigaction.sa_mask 为捕捉指定信号后临时屏蔽的表 pending什么时候清零&…

软件工程师简历(精选篇)

【#软件工程师简历#】 一份专业而精准的软件工程师简历,不仅能够全面展示技术实力和项目经验,更是赢得理想工作机会的重要敲门砖。那么,如何撰写一份令人印象深刻的软件工程师简历呢?以下是幻主简历整理的软件工程师简历&#xf…

基于springboot的汽车租赁管理系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

vscode远程连接服务器并启用tmux挂载进程

使用vscode连接远程服务器,有时候由于主机问题,比如中断,断网,超时,重启,关机等等情况,导致进程中断,如果是一个长时间的进程,会很麻烦,毕竟不能长时间一直盯…

设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

前言: 两个本想描述一样的意思的词,只因一字只差就让人觉得一个是好牛,一个好搞笑。往往我们去开发编程写代码时也经常将一些不恰当的用法用于业务需求实现中,但却不能意识到。一方面是由于编码不多缺少较大型项目的实践&#xff…

鸿蒙HarmonyOS 地图不显示解决方案

基于地图的开发准备已完成的情况下,地图还不显式的问题 首先要获取设备uuid 获取设备uuid 安装DevEco Studio的路径下 有集成好的hdc工具 E:\install_tools\DevEco Studio\sdk\default\openharmony\toolchains 这个路径下打开cmd运行 进入“设置 > 关于手机…

【C语言】值传递和地址传递

值传递 引用传递(传地址,传引用)的区别 传值,是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值。 传地址,是传值的一种特殊方式,只是他传递的是地址,不是普通…

C语言入门到精通(第六版)——第十六章

16、网络套接字编程 16.1、计算机网络基础 计算机网络技术是计算机技术和通信技术相结合的产物,代表计算机的一个重要发展方向。了解计算机的网络结构,有助于用户开发网络应用程序。 16.1.1、IP地址 为了使网络上的计算机能够彼此识别对方,…

Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件

本文将介绍一种手动的轻量级的方式,还原HTTP/TLS协议中传输的文件,为流量数据包中的文件分析提供帮助。 如果捕获的数据包中存在非文本类文件,例如png,jpg等图片文件,或者word,Excel等office文件异或是其他类型的二进…

记录使用documents4j来将word文件转化为pdf文件

本文记录使用documents4j来将word文件转化为pdf文件 文章目录 程序实例maven导入代码实现程序结果 本文小结 程序实例 maven导入 <!--word转pdf--><dependency><groupId>com.documents4j</groupId><artifactId>documents4j-local</artifactI…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行(一)

import binascii import unicorn import capstonedef printArm32Regs(mu):for i in range(66,78):print("R%d,value:%x"%(i-66,mu.reg_read(i)))def testhumb():CODE b\x1C\x00\x0A\x46\x1E\x00"""MOV R3, R0 的机器码&#xff1a;0x1C 0x00&#xf…

WordPress 6.7 “Rollins”发布

每个 WordPress 版本都会向一位在音乐界留下不可磨灭印记的艺术家致敬。WordPress 6.7 的代号为“Rollins”&#xff0c;旨在向传奇爵士萨克斯演奏家桑尼罗林斯致敬。罗林斯是爵士乐界最伟大的即兴演奏家和先驱之一&#xff0c;他以精湛的技术、创新精神和无畏的音乐表达方式影…

844.比较含退格的字符串

java用 O&#xff08;1&#xff09;空间这个方法&#xff0c;容易挺多bug的… O&#xff08;1&#xff09;空间 #&#xff1a;删除前一个字符 》 从后面开始判断&#xff08;这样可以用跳过的思想&#xff09;不能使用两次 i- - 来处理 # 的操作&#xff0c;会造成误删了前面…

WLAN消失或者已连接但是访问不了互联网

目录 1、WLAN已连接但是访问不了互联网 2、WLAN图标消失 今晚电脑突然连不上网了&#xff0c;重启试了好多种办法都没有用。 1、WLAN已连接但是访问不了互联网 这个的问题很多&#xff0c;建议直接网络重置&#xff0c;即将网络驱动全部删除&#xff0c;然后重新安装。 首先…