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

CTF挑战中Python Socket发送反转字符串失败问题求助

问题排查与解决方案

核心问题1:Bytes转字符串的错误处理

你代码里str(key)[2:16]的写法有问题:把bytes对象转成字符串时,会带上b''标识,比如服务器返回b'F9SIJINIK4DF7M\n'的话,转成str会变成"b'F9SIJINIK4DF7M\n'",硬切片[2:16]很可能截断错误,甚至包含换行这类不可见字符,导致反转后的key不符合服务器要求。

正确做法是直接对bytes解码,再清理多余空白字符:

key_str = key.decode('utf-8').strip()
truncKey = key_str  # 服务器返回的就是完整目标字符串,不需要硬切片

核心问题2:命令传输缺少分隔符

多数Socket服务端是按行读取数据的,你发送GET_KEY时没加换行符(\n或\r\n),可能导致服务端没正确识别命令;回传反转后的key时同理,也需要加换行符让服务端正确接收。

修改后的完整代码:

import socket

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

# 发送GET_KEY并添加换行符,确保服务端识别
aliensocket.send(b'GET_KEY\n')
key = aliensocket.recv(1024)

# 正确解码并清理字符串
key_str = key.decode('utf-8').strip()
revKey = key_str[::-1]

print(key_str)
print(revKey)

# 回传反转后的key,同样添加换行符
aliensocket.send(f'{revKey}\n'.encode('utf-8'))
response = aliensocket.recv(1024)
print(response.decode('utf-8'))

aliensocket.close()

额外验证点

  • 打印repr(key)查看原始bytes内容,确认服务器返回的key是否包含换行、回车等隐藏字符,避免硬切片出错。
  • 若服务器返回的key长度超过1024,可能需要多次调用recv,但CTF场景下一般不会这么设计,可作为备选排查方向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:40:22