正在发送连接的字节数组



我正试图通过TCP套接字将数据发送到用户名和密码字段。使用send((,我需要使用一个字节对象,我理解这一点。然而,我感到困惑的是,我曾尝试使用字节数组,我曾试图添加";PASS";,buff和";\\r\n";到字节数组,但未成功。如果我使用字节文字,我不能将buff连接为字符串。这是我最初拥有并需要更改的代码:

for buff in the buffer:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
conncet = sock.connect((target, port))
sock.recv(2048)
sock.send(b"USER testrn")
sock.recv(2048)
# The below code is where I've tried using a bytearray but I 
# cannot get it to work
sock.send(b"PASS " + buff + "rn") 
sock.send(b"QUITrn")
sock.close()

如有任何建议和/或帮助,我们将不胜感激。

有字符串(字符的序列(和字节(数字序列(。这两者是根本不同的东西,但人们往往会混淆它们。

字符串可以表示为字节。要做到这一点,需要以某种方式对它们进行编码。为了通过TCP套接字成功发送它们,接收端必须知道使用了什么编码,这样才能将字节转换回字符串。

例如:字符串";Hello World"可以通过ASCII编码表示为字节。这些字节将是:

72 101 108 108 111 32 87 111 114 108 100

Python会将这些字节显示为b"Hello World",因为[72,101,108,108,111,32,87,111,114,108,100]太难处理了。但"Hello World"b"Hello World"的区别在于,前者是一个字符列表,后者是一个数字列表(!(。

所以你需要做的是

  • 选择一种编码(类似UTF-8,以适应国际字符(
  • 将字符串编码为字节
  • 发送字节
  • 解码服务器上的字节

的客户端

user_str = "test"
sock.send("USER " + user_str + "rn".encode('utf8'))
# ...
pass_str = "whatever"
sock.send("PASS " + pass_str + "rn".encode('utf8')) 

选择编码是这里的重要部分。不要跳过,否则它会咬你的。

尝试像这样的连接

b"".join("provide the other part of the data here")

相关内容

  • 没有找到相关文章