You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python端口扫描脚本出现socket.error[Errno99]错误求助

解决你的Python端口扫描脚本报错问题

看起来你的脚本存在几个关键问题导致了报错,我来一步步帮你梳理并修复:

错误原因分析

  1. 无效的端口0:你用了range(1024),这会遍历0到1023的端口,但端口0是系统保留端口,无法用于连接,这是你看到Connection failure on port 0的直接原因,后续重复尝试连接这个无效端口还触发了Errno 99错误。
  2. 错误调用socket.connect()并判断返回值:socket.connect()是无返回值的方法——成功连接不会返回内容,失败则直接抛出异常。你在try-except块之后又两次调用s.connect((HOST, PORT)),不仅重复尝试连接浪费资源,而且如果之前连接失败,socket已经处于错误状态,再次调用必然报错。
  3. 文件写入模式错误:你用"w"模式写入文件,这会每次覆盖之前的内容,最终日志里只会保留最后一个成功连接的端口记录,应该用"a"(追加模式)来保存所有成功连接的记录。
  4. 未处理HOST参数为空的情况:如果用户运行脚本时没有通过-H指定目标主机,args.HOST会是None,这也会导致连接报错。
  5. socket资源未释放:每次连接后没有关闭socket,可能导致系统资源泄漏。

修复后的脚本

#!/usr/bin/python
import socket
import argparse
import os.path

def parse_args():
    parser = argparse.ArgumentParser(description='Scan for open ports on given hostname or ip address')
    parser.add_argument('-H','--HOST', required=True, help="Enter a hostname or Ip Address")
    return parser.parse_args()

def find_port(PORT, HOST):
    log_file = "Data Log.txt"
    # 构造日志内容,换行符保证每条记录单独一行
    success_msg = 'Successful Connections were made at host {} on port {}\n'.format(HOST, PORT)
    
    s = socket.socket()
    socket.setdefaulttimeout(1)
    try:
        s.connect((HOST, PORT))
        print '[+] Successful connection on ', PORT
        # 用追加模式写入日志,避免覆盖已有内容
        with open(log_file, "a") as f:
            f.write(success_msg)
    except socket.error as e:
        print '[+] Connection failure on port {}, error: {}'.format(PORT, e)
    finally:
        # 无论连接成功或失败,都关闭socket释放资源
        s.close()

if __name__=='__main__':
    args = parse_args()
    # 从端口1开始扫描到1023,跳过无效的端口0
    for i in range(1, 1024):
        find_port(i, args.HOST)

修复说明

  • 调整扫描范围为range(1, 1024),跳过无效的端口0;
  • 将connect()调用仅放在try块内,成功连接后直接用追加模式写入日志,避免覆盖历史记录;
  • 给--HOST参数添加required=True,强制用户必须指定目标主机,避免None值引发的错误;
  • 在finally块中关闭socket,确保系统资源被正确释放;
  • 优化了错误信息,显示具体错误内容,方便后续调试。

内容的提问来源于stack exchange,提问作者user9688514

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:15:22