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

运行WHOIS脚本时出现TypeError: a bytes-like object is required, not 'str'错误怎么办?

WHOIS脚本报错:TypeError: a bytes-like object is required, not 'str'

问题描述

我正在编写一个基础的WHOIS脚本,但无法正常运行。在Linux终端执行时,返回错误:

"TypeError: a bytes-like object is required, not 'str'",错误指向代码行:s.send(sys.argv[1]+"\r"+"\n")。

consulta.py

#!/usr/share/python
import socket
import sys
import pyfiglet

ascii_banner = pyfiglet.figlet_format("WHOIS - Gustang")
print (ascii_banner)

reg = "whois.godaddy.com"

if len(sys.argv) == 2:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.connect((reg, 43))
        s.send(sys.argv[1]+"\r"+"\n")
        resp = s.recv(1024)
        print (resp)
else:
        print ("Modo de Uso: IPv4 + Porta")
        print ("Exemplo: 255.255.255.255 21")

问题原因

Python的socket.send()方法要求传入**字节类型(bytes)**的数据,而你当前传入的是字符串(str)类型,类型不匹配直接触发报错。

解决方案

  1. 将发送的字符串通过encode()方法编码为字节类型(推荐用UTF-8编码);
  2. 接收的响应是字节类型,用decode()解码为字符串,输出更易读;
  3. 修正使用提示:WHOIS查询不需要端口参数,只需传入域名或IP地址即可。

修改后的完整代码

#!/usr/share/python
import socket
import sys
import pyfiglet

ascii_banner = pyfiglet.figlet_format("WHOIS - Gustang")
print(ascii_banner)

reg = "whois.godaddy.com"

if len(sys.argv) == 2:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((reg, 43))
    # 编码为字节后发送
    s.send((sys.argv[1] + "\r\n").encode('utf-8'))
    resp = s.recv(1024)
    # 解码为字符串后打印
    print(resp.decode('utf-8'))
    s.close()  # 新增:用完socket后关闭连接
else:
    print("使用方式:域名/IP地址")
    print("示例:google.com 或 8.8.8.8")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:25:17