当前位置: 首页 > news >正文

用Pyhon编写一个属于自己的nmap

用Pyhon编写一个属于自己的nmap

文章目录

  • 用Pyhon编写一个属于自己的nmap
    • 导入 socket 模块,确定目标主机 IP 或域名以及需要扫描的端口列表
    • 开始扫描、扫描每个端口
    • 创建一个 socket 对象,用于建立 TCP 连接
    • 尝试连接目标主机的指定端口
    • 如果连接成功,则表示该端口是开放的
    • 如果用户按下键盘中断键,退出程序
    • 如果无法解析主机名,退出程序
    • 如果连接失败,退出程序
    • 完整代码附上

要编写一个类似于nmap的端口扫描工具,我们需要:

  1. 确定要扫描的IP地址或主机名。
  2. 确定要扫描的端口范围。
  3. 创建一个Socket对象,使用Socket对象与目标主机建立TCP连接。
  4. 使用Socket对象发送TCP SYN包到目标主机上指定的端口。
  5. 接收目标主机返回的TCP SYN/ACK包。
  6. 根据目标主机返回的包,判断是否该端口处于打开状态。

重复步骤4-6,直到扫描完所有指定的端口。接着输出扫描结果。

导入 socket 模块,确定目标主机 IP 或域名以及需要扫描的端口列表

import socketclass PortScanner:def __init__(self, target, ports):self.target = targetself.ports = ports

开始扫描、扫描每个端口

def scan(self):print(f'Starting scan on {self.target}...\n')for port in self.ports:self.scan_port(port)

创建一个 socket 对象,用于建立 TCP 连接

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

尝试连接目标主机的指定端口

result = sock.connect_ex((self.target, port))if result == 0:

如果连接成功,则表示该端口是开放的

                print(f'Port {port} is open.')

如果用户按下键盘中断键,退出程序

print('Exiting...')exit()

如果无法解析主机名,退出程序

print('Hostname could not be resolved. Exiting...')exit()

如果连接失败,退出程序

            print('Could not connect to server. Exiting...')exit()

完整代码附上

import socketclass PortScanner:def __init__(self, target, ports):self.target = targetself.ports = portsdef scan(self):print(f'Starting scan on {self.target}...\n')for port in self.ports:self.scan_port(port)def scan_port(self, port):try:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(0.5)result = sock.connect_ex((self.target, port))if result == 0:print(f'Port {port} is open.')sock.close()except KeyboardInterrupt:print('Exiting...')exit()except socket.gaierror:print('Hostname could not be resolved. Exiting...')exit()except socket.error:print('Could not connect to server. Exiting...')exit()
http://www.lryc.cn/news/22670.html

相关文章:

  • 电信网上用户资管理系统的设计与实现
  • js函数柯里化-面试手写版
  • 【学习笔记】深入理解JVM之类加载机制
  • 驾驭云端之风1——Spring Cloud微服务架构实践指南
  • 【计算机网络基础】
  • grep与nm命令的应用
  • 【linux】软硬链接
  • 骨传导蓝牙耳机排行,盘点几款性能不错的骨传导耳机
  • ARM中的寄存器
  • git操作修改历史版本指定tag标签的代码,并发布新标签
  • SpringMVC——响应处理(1)【包含源码分析】
  • Normalization
  • 27K测试老鸟分享自己6年面试心得,四种公司、四种问题…
  • 中小企业数字化自动化转型的方法
  • 利用GPT-3 Fine-tunes训练专属语言模型
  • kubeadm方式安装k8s高可用集群(版本1.26x)
  • 分享5款堪称神器的免费软件,建议先收藏再下载
  • 【项目实战】从0开始入门JDK源码 - LinkedList源码
  • Polygon zkEVM的gas定价
  • stl中的智能指针类详解
  • Linux 阻塞和非阻塞 IO 实验
  • 你要的react+ts最佳实践指南
  • 软件测试人员会被替代吗?IT行业哪个方向的前景最好?字节12年测开是这样说的
  • 十六、vue3.0之富文本编辑器的选择
  • kafka(一) 的架构,各概念
  • 【ts的常用类型】
  • Hyper-V与安卓模拟器不共存
  • 【图像分类】卷积神经网络之ZFNet网络模型结构详解
  • 亿级高并发电商项目-- 实战篇 --万达商城项目 十三(编写购物车、优化修改商品、下架商品方法、购物车模块监听修改商品、删除商品消息)
  • springboot 虚拟线程demo