C++ Tracker NAT-PMP运行等解决方案

问题描述 投票:0回答:1

我出于爱好创建了一个洪流跟踪器。问题是如何在没有手动端口转发的情况下解决种子问题?

一般大家都写NAT-PMP和UPNP方案。但是 upnp 不是一个非常受支持的解决方案,我指的是它在搜索设备时从未找到任何东西的事实。 它也不想与 NAT-PMP 一起工作。 我的另一个问题是,他们通常使用什么?

我尝试了以下解决方案。 但我无法让它工作。在这里我不想关注 NAT-PMP 解决方案,而是关注有效的解决方案。

NAT-PMP解决方案:

void nat_pmp_request(boost::asio::io_service& io_service, const std::string& gateway, unsigned short int local_port, unsigned short int external_port) {
  udp::socket socket(io_service, udp::v4());
  udp::endpoint endpoint(boost::asio::ip::address::from_string(gateway), 5351); // NAT-PMP Gateway IP and port
  unsigned char request[] = {
    0, 0, 0, 2, // NAT-PMP version (2)
    0, 0, 0, 0, // Reserved
    0, 1, // NAT-PMP opcode (port mapping request)
    0, 0, // Reserved
    (external_port >> 8) & 0xff, external_port & 0xff, // Desired external port in network byte order
    (local_port >> 8) & 0xff, local_port & 0xff, // Local port in network byte order
    0, 0, 0, 0, // Mapping lifetime (0 means the mapping lasts until it is explicitly removed)
    0, 0, 0, 0  // Reserved
  };
  socket.send_to(boost::asio::buffer(request, sizeof(request)), endpoint);
}

# Main fuction

boost::asio::io_service io_service;
nat_pmp_request(io_service, "192.168.0.1", 49905, 49905);
io_service.run();
c++ networking connection p2p torrent
1个回答
0
投票

请求原始缓冲区似乎有太多字节(保留字节)。 看看这里:http://miniupnp.free.fr/nat-pmp.html

© www.soinside.com 2019 - 2024. All rights reserved.