微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对等方未响应BitTorrent协议中的握手消息

如何解决对等方未响应BitTorrent协议中的握手消息

我正在向同伴发送握手。这就是握手的样子:

b'\x13BitTorrent Protocol\x00\x00\x00\x00\x00\x00\x00\x00\x08O\xae=J2\xc5g\x98Y\xafK\x9e\x8d\xbb\x7f`qcG\x08O\xff=J2\xc5g\x98Y\xafK\x9e\x8d\xbb\x7f`qcG'

但是,我得到一个空的b''作为回应。我已将超时设置为10。 这是我的代码

            clientsocket=socket.socket(socket.AF_INET,socket.soCK_STREAM)
            clientsocket.settimeout(5)
            print("trying")
            try:
                clientsocket.connect((ip,port))
            except:
                continue
            print('connected')
            #print(req)
            clientsocket.send(req)
            clientsocket.settimeout(10)
            try:
                buffer = clientsocket.recv(1048)
            except:
                continue

知道我的错误是什么吗?

解决方法

示例代码存在一些问题。核心问题是握手中的标头错误地将“ Protocol”大写,如果此标头不逐字节正确,则大多数BitTorrent实现都会删除TCP连接。

以下是可以使用的代码的简要清理版本:

const https = require('https')
const FormData = require('form-data')

const host = 'postman-echo.com'
const path = '/post'
const method = 'POST'
const requestHeaders = {
  Accept: '*/*',// add headers here as necessary
}
const parts = [
  {
    name: 'RequestData',data: {
      cmdDict: {
        application: 'b',application_session_id: 'cd',},appId: '123',uId: '345645',contentType: 'application/json; charset=utf-8',{
    name: 'Parameter',data: {
      abc: { x: 'default',y: [],message: 'HELLO WORLD' },D: 1,]

async function fetchFromOrigin() {
  return new Promise((resolve,reject) => {
    const form = new FormData()

    parts.forEach((part) =>
      form.append(part.name,JSON.stringify(part.data),{
        contentType: part.contentType,}),)

    const options = {
      host,path,method,headers: Object.assign({},requestHeaders,form.getHeaders()),}

    const req = https.request(options,(res) => {
      if (res.statusCode < 200 || res.statusCode > 299) {
        return reject(new Error(`HTTP status code ${res.statusCode}`))
      }

      const body = []
      res.on('data',(chunk) => body.push(chunk))
      res.on('end',() => {
        const resString = Buffer.concat(body).toString()
        resolve(resString)
      })
    })

    req.on('error',(err) => reject(new Error(err.message)))
    form.pipe(req)
  })
}

module.exports = async function (context,req) {
  const res = await fetchFromOrigin()

  context.res = {
    body: res,}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。