深入解析多种端口扫描技术
作者:ZhuJiongJiongnu_441 | 来源:互联网 | 2024-12-15 13:14
本文探讨了在渗透测试中信息收集阶段使用的几种端口扫描技术,包括nmap、masscan、socket、telnet及nc等工具的应用与比较。
在开发一款用于渗透测试的小工具时,为了实现信息的自动化采集,特别是在处理大量IP地址的端口信息收集上,遇到了一些挑战。初始尝试通过Python结合nmap和多线程技术来完成任务,但面对200+ IP地址时,效率问题显得尤为突出。因此,本文将深入分析几种常见的端口扫描方法及其适用场景。 ### 1. 使用nmap进行端口扫描 nmap是一款功能强大的网络扫描工具,能够高效地执行主机发现、端口扫描以及服务版本检测等多种任务。在扫描大量主机时,可以通过设置`--min-hostgroup`参数来优化性能,该参数允许同时扫描多个主机,将它们分组处理。例如,使用`--min-hostgroup 50`命令可以将50个主机作为一个批次进行扫描,直到完成这批主机的扫描前不会显示任何结果。更多细节可查阅nmap官方文档。 ### 代码示例 ```python #coding=utf-8 import nmap from queue import Queue from threading import Thread def portscan(ip): portlist = [] nm = nmap.PortScannerYield() for r in nm.scan(ip, ports='1-10000', arguments='-sS --min-hostgroup'): m = r[1]['scan'][ip]['tcp'] for p in m: temp = str(p) + "----" + m[p]['state'] portlist.append(temp) print(portlist) class Consumer(Thread): def __init__(self, q): Thread.__init__(self) self.q = q def run(self): while not self.q.empty(): ip = self.q.get() try: portscan(ip) except Exception as e: print(e) continue def producer(ip_list): num = 10 threads = [] q = Queue() for i in ip_list: print(i) q.put(i) threads = [Consumer(q) for _ in range(num)] for t in threads: t.start() for t in threads: t.join() ip_list = ['120.78.207.76', '120.78.207.231', '120.78.207.18', '120.78.207.233', '120.78.207.165', '120.78.207.48', '120.78.207.112', '120.78.207.27', '120.78.207.51', '120.78.207.8'] producer(ip_list) ``` 上述代码片段展示了如何利用nmap和多线程技术提高扫描效率。然而,即便如此,对于较大规模的IP地址集合,这种方法仍有待优化。 ### 2. 使用masscan进行快速扫描 masscan以其极高的扫描速度著称,适用于大规模网络环境下的快速扫描需求。它默认使用SYN扫描模式,即向目标主机发送SYN包,如果收到SYN+ACK响应,则表明端口开放;若收到RST响应,则表示端口关闭。 #### Python接口调用 ```python def portscan(ip): mas = masscan.PortScanner() mas.scan(ip, ports='1-65535') print(mas.scan_result) ``` #### 命令行使用 - 扫描B类子网中的443端口:`masscan 10.11.0.0/16 -p443` - 同时扫描80和443端口:`masscan 10.11.0.0/16 -p80,443` - 高速扫描100个常用端口:`masscan 10.11.0.0/16 --top-ports 100 -rate 100000` ### 3. 利用socket进行端口探测 socket方法直接使用Python标准库中的socket模块来实现端口扫描。这种方式简单直接,但可能不如nmap或masscan那样全面,尤其是在处理复杂网络环境时。 ```python import socket def portscan(ip, port): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(0.2) result = s.connect_ex((ip, port)) if result == 0: print(f'{ip}:{port} is open') s.close() except Exception as e: print(e) ``` ### 4. 使用telnet进行端口探测 虽然telnet通常用于远程登录,但它也可以用来检查特定端口是否开放。此方法涉及完整的TCP三次握手过程。 ```python import telnetlib def portscan(ip, port): try: with telnetlib.Telnet(ip, port, timeout=0.2) as tn: print(f'{ip}:{port} is open') except Exception as e: print(e) ``` ### 5. 通过nc命令进行端口探测 nc(Netcat)是一个非常灵活的网络工具,可以用来建立TCP连接或发送UDP数据包。使用`nc -v -w 1 -z ip port`命令可以轻松地探测目标主机上的端口状态。 ```python import os def portscan(ip, port): command = f'nc -v -w 1 -z {ip} {port}' result = os.system(command) if result == 0: print(f'{ip}:{port} is open') ``` ### 总结 不同的端口扫描工具有各自的优缺点。nmap提供了最详尽的扫描结果,适合于需要深入了解目标网络的情况;而masscan则以其惊人的速度赢得了广泛的认可,特别适用于大规模网络环境。相比之下,基于socket的方法虽然简单,但在某些情况下可能会出现误报。根据实际需求选择合适的工具和技术至关重要。 #### 参考资料 - [nmap官方文档](https://nmap.org/book/man-performance.html) - [安全脉搏](https://www.secpulse.com/archives/95604.html)
推荐阅读
addcslashes—以C语言风格使用反斜线转义字符串中的字符addslashes—使用反斜线引用字符串bin2hex—函数把包含数据的二进制字符串转换为十六进制值chop—rt ...
[详细]
蜡笔小新 2024-12-15 12:31:43
本篇文章将详细介绍如何通过Python编程语言来实现从指定网页上抓取图片链接的功能,并提供了一个实用的代码示例。 ...
[详细]
蜡笔小新 2024-12-15 11:58:32
日志记录对于软件开发至关重要,特别是在调试和维护阶段。通过日志,开发者能够追踪错误源头并了解系统的运行状态。本文将探讨如何在Django框架中有效配置和使用日志记录功能。 ...
[详细]
蜡笔小新 2024-12-14 18:37:51
本文深入探讨了Python中的多线程机制,包括线程的基本概念、创建线程的方法以及线程间的通信策略。 ...
[详细]
蜡笔小新 2024-12-14 16:17:23
本文介绍了Kettle资源库的基本概念、类型及其管理方法,同时探讨了Kettle的不同运行方式,包括图形界面、命令行以及API调用,并详细说明了日志记录的相关配置。 ...
[详细]
蜡笔小新 2024-12-14 08:43:37
本文详细介绍了如何利用Bootstrap框架构建一个具有渐变效果的固定顶部响应式导航栏,包括HTML结构、CSS样式以及JavaScript交互的完整实现过程。适合前端开发者和学习者参考。 ...
[详细]
蜡笔小新 2024-12-12 18:04:25
本文探讨了如何使用ls -lsh命令排除总大小输出,仅显示文件大小的方法,并提供了几种实现这一目标的解决方案。 ...
[详细]
蜡笔小新 2024-12-15 09:42:12
本篇教程将介绍Python中的字符串格式化方法、用户输入处理以及基本的运算符和控制结构。 ...
[详细]
蜡笔小新 2024-12-14 20:00:45
AJAX技术允许网页在不重新加载整个页面的情况下进行异步更新,通过向服务器发送请求并接收JSON格式的数据,实现局部内容的动态刷新。 ...
[详细]
蜡笔小新 2024-12-14 17:11:55
本文旨在介绍在iOS平台进行直播技术开发前的准备工作,重点讲解AVFoundation框架的基本概念和使用方法。通过对AVFoundation的深入理解,开发者能够更好地掌握直播应用中的音视频处理技巧。 ...
[详细]
蜡笔小新 2024-12-14 17:07:19
本文详细介绍了Python中文件操作的基本方法和异常处理技巧,包括文件的创建、读写、删除等操作,以及如何通过异常处理机制来增强程序的健壮性。 ...
[详细]
蜡笔小新 2024-12-14 16:30:34
本文探讨了如何利用Python进行数据处理的并行化,通过介绍Numba、多进程处理以及Pandas DataFrame上的并行操作等技术,旨在帮助开发者有效提高数据处理效率。 ...
[详细]
蜡笔小新 2024-12-14 11:30:03
本文详细介绍了如何使用Python通过GET和POST方法发送HTTP请求,并接收HTTP响应的具体实现方法。包括示例代码和相关模块的功能说明。 ...
[详细]
蜡笔小新 2024-12-14 11:22:40
本文详细介绍了如何在Spring Boot项目中配置Maven的pom.xml文件,包括项目的基本信息、依赖管理及构建插件的设置。 ...
[详细]
蜡笔小新 2024-12-13 21:32:29
本文详细介绍了不同媒体容器支持的字幕格式,以及如何使用FFPlay和FFMPEG进行字幕和LRC歌词的播放与转换。涵盖的内容包括字幕显示方法、字体配置、字幕流选择等。 ...
[详细]
蜡笔小新 2024-12-13 13:13:40
ZhuJiongJiongnu_441
这个家伙很懒,什么也没留下!