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

从文本文件读取IP列表用于Socket连接时触发TypeError求助

解决Socket连接触发的TypeError: str, bytes or bytearray expected, not list错误

我看到你在从文本文件提取IP列表用于Socket连接时遇到了这个类型错误,咱们一步步来搞定它。

问题根源

你用open('list.txt', 'r').readlines()得到的ips是一个列表,每个元素还带着换行符(\n)。而Socket的连接方法需要的是单个字符串格式的IP地址,直接把列表传进去自然会触发类型不匹配的错误。

修正步骤

  1. 清理IP列表:先把每个IP字符串里的换行符去掉,同时过滤掉文本里可能存在的空行
  2. 遍历列表逐个处理:循环遍历处理后的IP列表,把每个单独的IP传入check函数
  3. 补全Socket连接逻辑:确保check函数里的socket调用参数格式正确

修正后的完整代码示例

import socket

# 读取并清理IP列表:去掉换行符,过滤空行
ips = [line.strip() for line in open('list.txt', 'r') if line.strip()]

def displayType(sec_type):
    switcher = {
        0: "1",
        1: "2",
        2: "3"
    }
    print(' type: ' + str(sec_type) + ' (' + switcher.get(sec_type,"Not defined by IETF") +')' )

def check(ip, port):
    try:
        # 创建socket对象
        link = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 设置超时,避免长时间等待无响应的IP
        link.settimeout(5)
        # 连接目标IP和端口(注意参数是元组格式)
        link.connect((ip, port))
        print(f"成功连接到 {ip}:{port}")
        # 这里可以添加你需要的后续操作,比如获取sec_type等逻辑
        # ...
        link.close()
    except Exception as e:
        print(f"连接 {ip}:{port} 失败: {str(e)}")

# 遍历IP列表,逐个检查(替换成你需要的目标端口)
target_port = 80
for ip in ips:
    check(ip, target_port)

关键要点说明

  • strip()方法会去掉字符串两端的换行符、空格等空白字符,保证IP格式干净可用
  • 列表推导式里的if line.strip()可以过滤掉文本文件中的空行,避免传入无效的空字符串IP
  • Socket的connect()方法接受的参数是一个元组(ip_str, port_int),必须确保IP是字符串类型,端口是整数类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:37:59