Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 28.04.2022
Сообщений: 31

Как настроить upnp с++

27.01.2025, 23:13. Показов 1708. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте, как пробросить upnp на c++
Видел пример кода с использованием natupnp.h:
C++
1
2
3
4
5
6
7
8
9
10
#include <natupnp.h>
 
void main()
{
    IUPnPNAT* pnp;
    get_StaticPortMappingCollection* MappingCollection;
    IStaticPortMapping* PortMap;
    pnp->get_StaticPortMappingCollection(&MappingCollection);
    MappingCollection->Add(123, "UDP", 321, "127.0.0.1", 1, "Your connection", PortMap);
}
Но этот код не работает давно как понял и я ищу как можно прокинуть порты с помощью стандартных библиотек
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2025, 23:13
Ответы с готовыми решениями:

Как настроить среду для написания и компиляции кода
Есть одна проблема. Раньше писал на Visual Studio 6, все было Ок! Сейчас работаю в 2005 версии, и никак не могу настроить...

Как настроить локальное ADO подключение к БД Paradox?
как настроить локальное ADO подключение к БД Paradox? разместил на форму ADODataSet и ADOQuery(не знаю может ещё ADOConnection надо) что...

Как настроить GCC
Надо что б по умолчанию дополнительно искал #include в нужной мне директории. Спасибо.

4
9 / 7 / 2
Регистрация: 22.12.2024
Сообщений: 32
28.01.2025, 08:06
С помощью стандартных библиотек - никак; точнее надо всё самому писать ручками - найти роутер, запросить поддерживает xml ли он то, что вам нужно, и пробросить порт. И да, тут и UDP и TCP и отправку/получение/таймауты - всё нужно писать.

Вам может помочь библиотека mini-unpnp, точно работает под линукс. Там же есть консольный клиент upnpc, которого можно в консоле попросить сделать что вам нужно. А пока он делает, запустить wireshark и подсмотреть что он в сеть отправляет и что получает (если сами будете делать).

Я делал сам с нуля.
0
184 / 72 / 35
Регистрация: 09.05.2022
Сообщений: 387
28.01.2025, 13:36
UPnP (Universal Plug and Play) на C++

libupnp дает API для работы с UPnP устройствами, включая проброс портов на роутере

если на ubuntu:
Code
1
sudo apt-get install libupnp-dev
и сам код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <upnp/upnp.h>
#include <upnp/upnptools.h>
#include <iostream>
#include <cstring>
 
int main() {
    // Инициализация библиотеки UPnP
    int ret = UpnpInit(nullptr, 0);
    if (ret != UPNP_E_SUCCESS) {
        std::cerr << "UpnpInit failed: " << ret << std::endl;
        return 1;
    }
 
    // Получаем локальный IP-адрес
    const char* ip_address = UpnpGetServerIpAddress();
    if (!ip_address) {
        std::cerr << "Failed to get local IP address" << std::endl;
        UpnpFinish();
        return 1;
    }
 
    // Пробрасываем порт
    const char* protocol = "TCP"; // или "UDP"
    const char* description = "My Port Mapping";
    int external_port = 12345;
    int internal_port = 12345;
    int lease_duration = 0; // 0 означает бессрочно
 
    ret = UpnpAddPortMapping(
        nullptr, // внешний IP-адрес (nullptr означает любой)
        external_port,
        protocol,
        internal_port,
        ip_address,
        1, // включить
        description,
        lease_duration
    );
 
    if (ret != UPNP_E_SUCCESS) {
        std::cerr << "UpnpAddPortMapping failed: " << ret << std::endl;
        UpnpFinish();
        return 1;
    }
 
    std::cout << "Port mapping successful!" << std::endl;
 
    // Закрываем библиотеку UPnP
    UpnpFinish();
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 28.04.2022
Сообщений: 31
28.01.2025, 15:22  [ТС]
Цитата Сообщение от karlhildekruger Посмотреть сообщение
libupnp дает API для работы с UPnP устройствами, включая проброс портов на роутере
Цитата Сообщение от basiliscos Посмотреть сообщение
С помощью стандартных библиотек - никак; точнее надо всё самому писать ручками - найти роутер, запросить поддерживает xml ли он то, что вам нужно, и пробросить порт. И да, тут и UDP и TCP и отправку/получение/таймауты - всё нужно писать.
Получается нету какого-то стандарта работы с upnp и надо пользоваться сторонними библиотеками?
Как это происходит вообще, получается библиотека работы с upnp - это куча уникальных инструкций для производителя роутеров отдельно?
Или же существуют какие-то стандарты под которые я смогу сам написать код, чтобы настроить авто проброс портов с помощью upnp?
Просто я изучаю этот вопрос со стороны профессионального интереса, хотелось бы знать и уметь реализовать такое самим. Хочу сам реализовать простенький чат на c++ и вроде все работает в локальной сети, но чтобы через инет нужно уметь автоматически пробрасывать порты, чтобы пользователям не пришлось заморачиваться
0
9 / 7 / 2
Регистрация: 22.12.2024
Сообщений: 32
28.01.2025, 16:21
Лучший ответ Сообщение было отмечено Eclipse08090 как решение

Решение

Получается нету какого-то стандарта работы с upnp и надо пользоваться сторонними библиотеками?
Ну всё, немного сложней. Есть стандарт (описание xml/soap, как работать), несколько версий его, есть реализации от разных библиотек и устройств; все со своими особенностями. Например, некоторые не понимают пустой тэг:

XML
1
<tag/>
хотя по стандарту xml это корректная конструкция.

И всё это ещё, не касаясь C++. Так что да, стандартных библиотек, нет и не будет, хотя бы потому, что на роутерах и в кастомных программах разные требования... кто-то хочет, например, без аллокации памяти парсить и всё на стеке делать. Или кто-то (как я), хочет свои механизмы отправки в сеть использовать (тот же boost::asio) и т.п.

Так что всё что есть - это некоторые библиотеки, если вас устраивают, используйте, если нет - пишите своё под свои устройства )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2025, 16:21
Помогаю со студенческими работами здесь

COM-порт, как правильно настроить
Доброго времени суток. Прошу помощи в решении следующей проблемы: на COM порте висит железка, которая постоянно посылает данные в порт....

Как настроить Dev-C++ для GTK под WindowsXP
Уж и незнаю что делать, под Linux без проблем удалось настроить GTK а вот под виндой никак «Hello World» не комилиться. Сначала нашел...

Не знаю как настроить счетчики for...
у меня есть два счетчика for.мне нужно чтоб второй счетчик при первом значение первого счетчика считал свое первое значение, а при втором...

BDE как настроить на другом ПК
Привет всем!!! Помогите разобраться.. Вопрос такой, общего характера.. Не могу запустить Базу компоненты из библиотеки BDE на другом...

Как настроить изначальный код, который открывается при создании нового проекта
Объясните пожалуйста, как в Visual C++ 2008 Express настроить изначальный шаблон кода при создании нового проекта. Например, чтоб каждый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru