如何解决对等方未响应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 举报,一经查实,本站将立刻删除。