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

如何用Socket扫描IP列表?列表转字符串及代理端口扫描求助

问题与解决方案

一、IP列表读取问题

你当前读取targetlist.txt的代码仅读取第一行,且字符串拼接逻辑错误,无法正确获取所有目标IP。targetlist.txt内容为每行一个IP:

192.168.0.1
55.34.23.53

错误代码分析

fp = open("targetlist.txt", "r")
val = fp.readline().split()  # readline()仅读取第一行,split()在此场景无意义
print("GETTING BOUNTY:     ", "HOSTNAME", val)

str1 = val  # 直接将列表赋值给字符串变量,后续拼接会报错

for ele in val:
    str1 += ele  # 列表与字符串拼接触发类型错误

hack = val  # hack为列表,但后续socket操作需要单个IP字符串

正确读取方式

通过列表推导式读取所有非空IP行:

# 读取targetlist.txt所有IP,自动去除空行和换行符
with open("targetlist.txt", "r") as fp:
    target_ips = [line.strip() for line in fp if line.strip()]

二、代理配置与端口扫描问题

当前代码存在两个核心问题:

  1. 代理格式错误:proxies字典的http值为列表元组,不符合requests的参数要求;
  2. socket原生不支持HTTP代理:你用requests测试代理,但socket的connect_ex是直接发起TCP连接,不会走HTTP代理。要让socket通过代理扫描,需使用SOCKS代理或HTTP隧道工具。

错误代理配置分析

with open('proxyf.txt', 'r') as f:
    proxy = f.read().splitlines()
proxies = {
    'http': (proxy,)  # 格式错误,应为单个代理字符串,如"http://ip:port"
}

修正方案(使用SOCKS代理+socket)

如果你的代理是SOCKS类型,先安装pysocks库:

pip install pysocks

以下是整合IP列表读取、代理配置的完整修正代码:

完整修正代码

import socket
import sys
import socks
from datetime import datetime
from colorama import init, Fore, Style
import subprocess

init(autoreset=True)
subprocess.call('clear', shell=True)

print(Style.BRIGHT + Fore.YELLOW + "START AT:", datetime.now())
print("=============COREXITAL PORT SCANNER=============")
print("")

# 读取目标IP列表
with open("targetlist.txt", "r") as fp:
    target_ips = [line.strip() for line in fp if line.strip()]

# 读取代理列表
with open('proxyf.txt', 'r') as f:
    proxies = [line.strip() for line in f if line.strip()]

def scan_with_proxy(target_ip, proxy_addr):
    """使用指定代理扫描单个IP的端口"""
    try:
        # 解析代理IP和端口
        proxy_host, proxy_port = proxy_addr.split(':')
        proxy_port = int(proxy_port)

        # 配置SOCKS代理,将socket流量转发到代理
        socks.set_default_proxy(socks.SOCKS5, proxy_host, proxy_port)
        socket.socket = socks.socksocket

        print(f"Scanning IP {target_ip} via proxy {proxy_addr}")
        t1 = datetime.now()
        print(f"Start time: {t1}")
        print("LOADING...\n")

        for port in range(1, 100):
            hacking = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            hacking.settimeout(5)  # 缩短超时时间,提升扫描效率
            result = hacking.connect_ex((target_ip, port))
            
            if result == 0:
                print(f"PORT: {port} {Style.BRIGHT + Fore.GREEN}OPEN")
            else:
                print(f"PORT: {port} {Style.BRIGHT + Fore.RED}CLOSED")
            
            hacking.close()
            print(f"Current time: {datetime.now()}\n")

        print(f"Scan completed for {target_ip}\n")

    except KeyboardInterrupt:
        print("Canceled")
        sys.exit()
    except socket.gaierror:
        print(f"Hostname {target_ip} could not be resolved.")
    except socket.error as e:
        print(f"Socket error: {e}")
    except ValueError:
        print(f"Invalid proxy format: {proxy_addr}, should be ip:port")

# 遍历所有目标IP,使用第一个代理扫描(可修改为轮询/随机代理)
for ip in target_ips:
    if proxies:
        scan_with_proxy(ip, proxies[0])
    else:
        print("No proxies found in proxyf.txt")
        sys.exit()

print("")
print(Style.BRIGHT + Fore.YELLOW + "END OF REPORT")
print("2023 - Corexital")

关键修改说明

  1. IP列表读取:通过列表推导式获取所有有效IP,避免空行和格式问题;
  2. 代理配置:使用pysocks将socket流量转发到SOCKS代理,适配代理扫描需求;
  3. 扫描逻辑:封装扫描函数,支持遍历多个目标IP,优化超时时间提升效率;
  4. 错误处理:新增代理格式错误捕获,完善异常提示信息。

注意事项

  • 若代理为HTTP类型,需使用requests的CONNECT隧道或httptunnel库实现转发,socket原生不支持HTTP代理;
  • 批量扫描建议添加代理轮换逻辑,避免单个代理被封禁;
  • 未经授权扫描他人IP可能违反法律法规,请仅在合法授权范围内使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:45:21