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

Python Socket模块请求发送异常:CTF场景下无响应问题排查

问题原因
  1. 协议格式完全错误:你错误地给每个指令套上了HTTP POST请求的框架,但这个CTF服务器是基于纯文本指令的,根本不识别HTTP格式,所以服务器没有任何响应。
  2. 字符串格式化语法错误:代码里的\{}是多余的转义,应该直接用{},同时换行符的写法混乱,导致发送的指令格式完全不符合服务器预期。
  3. 指令结构不符合要求:题目要求发送的是USER aliensignal这类完整指令,但原代码的指令拼接逻辑完全偏离了服务器的预期格式。
解决方法

直接发送纯文本指令,每个指令结尾加上换行符(\r\n),确保服务器能识别指令结束。修正后的代码如下:

from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE, SIG_DFL)

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 10000))

# 定义要发送的指令列表,完全匹配题目要求
commands = [
    "USER aliensignal",
    "PASS unlockserver",
    "SEND moonbase",
    "END"
]

for cmd in commands:
    # 发送指令,加上换行符作为协议结束标记
    sock.sendall(f"{cmd}\r\n".encode('utf-8'))
    # 接收响应并解码为可读字符串打印
    response = sock.recv(2048)
    if response:
        print(f"Response: {response.decode('utf-8').strip()}")
    else:
        print("No response received")

sock.close()
关键说明
  • 移除了多余的HTTP请求框架,直接发送题目要求的纯文本指令。
  • 使用sendall替代send,确保指令完整发送,避免因TCP流特性导致的部分发送问题。
  • 每个指令结尾添加\r\n,这是多数文本协议的指令结束标记,让服务器明确知道当前指令已发送完成。
  • 对接收的字节响应进行解码,转换成可读字符串输出,避免打印原始字节内容。

如果注释里的要求是每个字段单独发送(即先发USER、接收响应,再发aliensignal、接收响应,以此类推),则修改指令列表为:

commands = [
    "USER",
    "aliensignal",
    "PASS",
    "unlockserver",
    "SEND",
    "moonbase",
    "END"
]

其他代码逻辑保持不变即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:43