Python多线程端口扫描器实现与本地测试

巷口听风
巷口听风
发布时间:2026-10-11 | 1人浏览过
原创

本文介绍如何使用Python的socket模块结合threading库实现一个简单的端口扫描器。通过多线程并发扫描本地主机(127.0.0.1)的端口范围,利用connect_ex方法判断端口状态,并设置超时时间以提高扫描效率。文章提供了完整的Python代码示例,适合网络编程初学者参考学习。

Python端口扫描器实现原理

在Python中,我们可以利用socket模块创建TCP连接来探测目标主机的端口状态。通过设置合理的超时时间,可以避免因端口无响应导致的程序长时间挂起。结合多线程技术,可以显著提高扫描效率,特别是在需要扫描大量端口时。

核心代码实现

以下是一个完整的Python端口扫描器示例,针对本地主机(127.0.0.1)进行端口扫描:

#!/usr/local/bin/python
#-*- coding: UTF-8 -*-
#端口扫描器
import socket
import thread
import time

socket.setdefaulttimeout(3) #设置了全局默认超时时间

def socket_port(ip,PORT): #扫描开放端口
  try:
    if PORT>=65535:
      print u"端口扫描结束0-65535"
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #s.settimeout(float(1)) #延时5S
    #s.connect((ip,PORT))
    result=s.connect_ex((ip,PORT))
    if(result==0):
      print ip,u":",PORT,u"端口开放"
    s.close()
  except:
    print u"扫描端口异常2"

def IP__port(data): #扫描端口
  try:
    #data="127.0.0.1"
    t=time.time()
    for i in range(0,1000 + 1):  #65535
      thread.start_new_thread(socket_port,(data,int(i)))
      time.sleep(0.003) #确保先运行Seeker中的方法
    print u'扫描端口完成用时 time:%f' % (time.time()-t)
  except:
    print u"扫描端口异常1"

if __name__=='__main__':
  #socket_port("127.0.0.1",21) #扫描开放端口
  IP__port("127.0.0.1") #多线程

代码功能解析

该程序主要包含两个核心函数:

  • socket_port(ip, PORT):负责单个端口的扫描。通过创建socket对象并尝试连接目标IP和端口,利用connect_ex方法的返回值判断端口状态。若返回值为0,表示端口开放。
  • IP__port(data):负责多线程扫描。通过循环启动多个线程,每个线程负责扫描一个端口。使用time.sleep(0.003)控制线程启动间隔,避免资源竞争。

运行与验证

执行该脚本后,程序将自动扫描本地主机(127.0.0.1)的0-1000端口范围。扫描完成后,会输出每个开放端口的信息以及总耗时。用户可以通过修改IP__port函数中的data参数来扫描其他主机。

注意事项

在实际使用中,请注意以下几点:

  • 扫描大量端口时,建议适当增加超时时间或调整线程启动间隔,以避免网络拥塞。
  • 多线程扫描可能产生大量并发连接,请确保目标主机和自身网络环境能够承受。
  • 该示例仅用于学习和测试目的,请勿在未授权的情况下对他人主机进行扫描。

以上就是Python实现本地主机端口扫描器的详细内容,更多关于Python网络编程的资料请关注本站其它相关文章!

本站声明

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

Python 相关产品和应用

全部下载

专题列表