《Black Hat Python》第2章TCP代理工具运行无数据返回问题求助
你的代码存在3处核心语法/API使用错误,是导致无数据输出的根本原因:
错误1:
receive_from函数误用UDP套接字API
TCP连接使用recvfrom会返回(数据字节, 对端地址)元组,你直接将元组和bytes类型的buffer相加会触发类型错误,但代码中捕获所有异常直接pass,导致你看不到报错,程序直接跳出接收循环返回空字节。
修正方案:将data = connection.recvfrom(4096)改为data = connection.recv(4096)错误2:所有格式化字符串遗漏f前缀
hexdump函数中两处格式化字符串没有加f标识,运行时会直接输出字面量而非变量值,甚至触发格式错误:
- 十六进制转换行改为:
hexa = ' '.join([f'{ord(c):02X}' for c in word]) - 结果拼接行改为:
results.append(f'{i:04x} {hexa:<{hexwidth}} {printable}')
- 错误3:字符翻译表生成逻辑错误
你生成的HEX_FILTER是普通字符串,无法直接作为str.translate的入参,需要转换为字符映射表:
修正方案:将HEX_FILTER的定义改为:
HEX_FILTER = str.maketrans( {i: chr(i) if len(repr(chr(i))) == 3 else '.' for i in range(256)} )
以上错误修正后,再运行你原本的测试命令即可正常看到FTP握手、数据传输的日志输出。需要注意FTP属于多端口协议,当前代理仅能处理21端口的控制链路流量,无法处理被动模式下的动态数据端口流量,若需要完整代理FTP需要额外扩展端口监听逻辑。
内容的提问来源于stack exchange,提问作者user16774307
相关产品推荐
相关产品推荐

