Python实现指定IP端口扫描的三种方法及多线程优化

阿橙
阿橙
发布时间:2026-10-13 | 3人浏览过
原创

本文详细介绍在Linux环境下使用Python进行端口扫描的三种实现方式。首先通过socket模块直接建立连接,其次利用telnetlib模拟Telnet行为,最后结合threading模块实现多线程高效扫描。文章提供了完整的代码示例,解决了传统telnet命令无超时参数的问题,帮助开发者快速掌握网络端口状态检测技术。

Python端口扫描背景与优势

在Linux系统中,判断主机连通性通常使用ping命令,而检测端口开放状态则多依赖telnet命令。然而,原生telnet命令缺乏超时时间设置参数,导致在网络状况不佳时可能长时间阻塞,使用体验不够便捷。为了解决这一问题,可以利用Python编写自定义的端口扫描脚本,实现更灵活的控制和更高的效率。

基于Socket的端口扫描实现

使用Python标准库中的socket模块是进行端口扫描的基础方法。通过创建TCP套接字并尝试连接指定IP和端口,可以判断端口是否处于开放状态。该方法直接操作底层网络接口,无需额外安装第三方库,适用于大多数基础场景。


#!/usr/bin/env python

import socket

def get_ip_status(ip,port):
  server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  try:
    server.connect((ip,port))
    print('{0} port {1} is open'.format(ip, port))
  except Exception as err:
    print('{0} port {1} is not open'.format(ip,port))
  finally:
    server.close()

if __name__ == '__main__':
  host = '10.0.0.11'
  for port in range(20,100):
    get_ip_status(host,port)

基于Telnetlib的扫描方法

另一种实现方式是使用telnetlib模块。该模块提供了Telnet类的封装,允许程序通过open方法建立TCP连接。虽然其本质与socket类似,但telnetlib提供了更高层级的抽象,适合需要模拟Telnet协议行为的特定需求。代码逻辑上,通过捕获连接异常来判断端口关闭或不可达,并在finally块中确保连接资源被正确释放。


import telnetlib

def get_ip_status(ip,port):
  server = telnetlib.Telnet()   # 创建一个Telnet对象
  try:
    server.open(ip,port)     # 利用Telnet对象的open方法进行tcp链接
    print('{0} port {1} is open'.format(ip, port))
  except Exception as err:
    print('{0} port {1} is not open'.format(ip,port))
  finally:
    server.close()

if __name__ == '__main__':
  host = '10.0.0.11'
  for port in range(20,100):
    get_ip_status(host,port)

多线程高效扫描策略

当需要扫描大量端口时,单线程顺序执行会导致效率低下。通过引入threading模块,可以将每个端口的扫描任务封装为独立的线程并行执行。主线程负责创建并启动所有子线程,随后通过join方法等待所有任务完成。这种多线程方案显著提升了扫描速度,特别适用于大规模网络环境下的端口探测。


#!/usr/bin/env python

import telnetlib
import threading

def get_ip_status(ip,port):
  server = telnetlib.Telnet()
  try:
    server.open(ip,port)
    print('{0} port {1} is open'.format(ip, port))
  except Exception as err:
    print('{0} port {1} is not open'.format(ip,port))
  finally:
    server.close()

if __name__ == '__main__':
  host = '10.0.0.11'
  threads = []
  for port in range(20,100):
    t = threading.Thread(target=get_ip_status,args=(host,port))
    t.start()
    threads.append(t)

  for t in threads:
    t.join()

以上介绍了Python实现指定IP端口扫描的几种常见方式,包括基于socket的直接连接、telnetlib的封装调用以及多线程并行处理。这些方法各有优劣,开发者可根据实际场景选择合适的实现方案。希望本文的内容能为您提供参考,如有更多技术分享需求,欢迎继续支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表