为什么我得到'TypeError:在Linux终端中运行WHOIS脚本时,需要类似字节的对象,而不是'str''?

jhiyze9q  于 2023-06-05  发布在  Linux
关注(0)|答案(1)|浏览(159)

我正在创建一个基本的“whois”脚本,但它不工作。当我尝试在Linux终端中运行它时,它返回错误:
“TypeError:a bytes-like object is required,not 'str'”在代码行中指示:s.send(sys.argv[1]+"\r"+"\n")

咨询.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")
wixjitnu

wixjitnu1#

您需要发送字节。响应也将是字节。
删除了不相关的代码...

from socket import socket, AF_INET, SOCK_STREAM
from sys import argv

HOST = 'whois.godaddy.com'
PORT = 43
CONNECTION = HOST, PORT
CRLF = b'\r\n'
BUFSIZ = 16

def get_response(s: socket) -> str:
    ba = bytearray()
    while True:
        ba.extend(s.recv(BUFSIZ))
        if ba.endswith(CRLF):
            break
    return ba.decode()

if len(argv) == 2:
    with socket(AF_INET, SOCK_STREAM) as s:
        s.connect(CONNECTION)
        s.send(f'{argv[1]}\r\n'.encode())
        print(get_response(s))

相关问题