从文本文件读取IP列表用于Socket连接时触发TypeError求助
解决Socket连接触发的TypeError: str, bytes or bytearray expected, not list错误
我看到你在从文本文件提取IP列表用于Socket连接时遇到了这个类型错误,咱们一步步来搞定它。
问题根源
你用open('list.txt', 'r').readlines()得到的ips是一个列表,每个元素还带着换行符(\n)。而Socket的连接方法需要的是单个字符串格式的IP地址,直接把列表传进去自然会触发类型不匹配的错误。
修正步骤
- 清理IP列表:先把每个IP字符串里的换行符去掉,同时过滤掉文本里可能存在的空行
- 遍历列表逐个处理:循环遍历处理后的IP列表,把每个单独的IP传入
check函数 - 补全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
相关产品推荐
相关产品推荐

