Лучшие вопросы
Таймлайн
Чат
Перспективы

UPnP

Из Википедии, свободной энциклопедии

Remove ads

Universal Plug and Play (UPnP) — архитектурный стандарт, предназначенный для автоматического обнаружения, подключения и взаимодействия устройств в сети. Он позволяет устройствам обмениваться данными и координировать свою работу без предварительной настройки пользователя. Стандарт основан на ряде открытых интернет-протоколов, включая TCP/IP, HTTP, XML и другие.

Remove ads

UPnP Forum

Universal Plug and Play Forum (Форум UPnP) — открытая ассоциация представителей отрасли, образованная в июне 1999 г. с целью выработки стандартов технологии UPnP, которые упростили бы объединение интеллектуальных устройств в рамках домашних и, со временем, корпоративных сетей. Участники форума создают и публикуют протоколы управления устройствами UPnP и протоколы управления службами.

В начале июня 2001 г. в состав Форума UPnP входило свыше 350 компаний. Руководство работой форума осуществляет Управляющий комитет по UPnP (UPnP Steering Committee), состоящий из 22 членов. Кроме того, имеются Технический комитет, Комитет по маркетингу и различные рабочие комитеты, занимающиеся конкретными категориями устройств. Списки участников форума, а также информация о порядке присоединения к нему доступны на веб-узле форума (EN).

Remove ads

Технические элементы

Суммиров вкратце
Перспектива

Технология UPnP предназначена для использования в домашних сетях, сетях малых предприятий и других небольших по масштабу сетевых сред. Она обеспечивает обмен данными между устройствами, находящимися под управлением одного сетевого контроллера, и функционирует независимо от используемой операционной системы, типа физической среды передачи данных или языка программирования.

UPnP поддерживает концепцию сетей с нулевой конфигурацией и автоматическое обнаружение устройств. При подключении устройство динамически получает IP-адрес и, по запросу, сообщает о своих возможностях, одновременно собирая информацию о характеристиках и функциональности других устройств в сети. Наличие серверов DHCP и DNS не является обязательным, поскольку они могут использоваться в случае их доступности. Кроме того, устройство может автоматически покинуть сеть без нарушения её работоспособности.

Технология UPnP базируется на ряде стандартов и протоколов, разработанных для Интернета, включая IP, TCP, UDP, HTTP и XML. Разработка UPnP предусматривает многостороннее сотрудничество компаний, заинтересованных в создании единых протоколов управления устройствами (DCP). В дальнейшем предполагается, что данные стандарты будут опираться на декларативные спецификации, составленные на языке XML и использующие протокол HTTP для обмена информацией.

Remove ads

Перенаправление портов

Суммиров вкратце
Перспектива

UPnP позволяет программно перенаправлять порты. Этим пользуются такие приложения, как Skype, μTorrent. Ниже приведён пример использования объекта OLE для осуществления такого перенаправления (код написан на Delphi 7, поддерживается ОС Windows XP Service Pack 2 и выше).

uses
  ..., WinSock, ComObj, ActiveX....

//Для свежих версий Delphi вместо юнита "ComObj" добавляйте "OleAuto".

...

function GetLocalIP: String; //Получить локальный IP-адрес
const WSVer = $101;
var
  wsaData: TWSAData;
  P: PHostEnt;
  Buf: array [0..127] of Char;
begin
  Result := '';
  if WSAStartup(WSVer, wsaData) = 0 then begin
    if GetHostName(@Buf, 128) = 0 then begin
      P := GetHostByName(@Buf);
      if P <> nil then Result := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
    end;
    WSACleanup;
  end;
end;

procedure AddUPnPEntry(Port: Integer; const Name: ShortString; LAN_IP: string);
var
  Nat: Variant;
  Ports: Variant;
begin
  if NOT(LAN_IP = '127.0.0.1') then begin
    try
      Nat := CreateOleObject('HNetCfg.NATUPnP');
      Ports := Nat.StaticPortMappingCollection;

      if not VarIsClear(Ports) then begin
        //do something
        //ShowMessage(IntToStr(Ports.Count));
        Ports.Add(Port, 'TCP', Port, LAN_IP, True, name);
      end;
    except on e:Exception do
      ShowMessage('An Error occured with adding UPnP Ports. '+e.Message);
    end;
  end;
end;

procedure RemoveUPnPEntry(Port: Integer);
var
  Nat: Variant;
  Ports: Variant;
begin
  try
    Nat := CreateOleObject('HNetCfg.NATUPnP');
    Ports := Nat.StaticPortMappingCollection;
    Ports.Remove(Port, 'TCP');
  except
    ShowMessage('An Error occured with removing UPnP Ports. ' +
      'Please check to see if your router supports UPnP and ' +
      'has it enabled or disable UPnP.');
  end;
end;

procedure ListUPnPEntry;
var
  Nat: Variant;
  Ports: Variant;
  Enum : IEnumVARIANT;
  MyPort : OLEVariant;
  IntPort, ExtPort : Integer;
  Desc, Protocol, IntClient, ExtIP : WideString;
  Enabled: Boolean;
  iValue: LongWord;
begin
  try
    Nat := CreateOleObject('HNetCfg.NATUPnP');
    Ports := Nat.StaticPortMappingCollection;

    if not VarIsClear(Ports) then begin
      Enum := IUnknown(Ports._NewEnum) as IEnumVARIANT;
      while Enum.Next(1, MyPort, iValue) = S_OK do begin
        Desc := MyPort.Description;
        Enabled := MyPort.Enabled;
        ExtIP := MyPort.ExternalIPAddress;
        ExtPort := MyPort.ExternalPort;
        IntClient := MyPort.InternalClient;
        IntPort := MyPort.InternalPort;
        Protocol := MyPort.Protocol;
        Form1.Memo1.Lines.Add(Desc + ^I + ^I + IntToStr(ExtPort) + ^I + Protocol + ^I + IntToStr(IntPort) + ^I + IntClient);
      end;
    end;

  except
    ShowMessage('An Error occured with listing UPnP Ports.Please check to see if your router supports UPnP and has UPnP enabled.');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AddUPnPEntry(8090, 'MyProgram', GetLocalIP); //Добавить порт
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  RemoveUPnPEntry(8090); //Удалить порт
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  ListUPnPEntry; //Обновить
end;

В данном примере имя службы задавалось как "MyProgram". Имя службы содержит описание программы для перенаправления порта.

Remove ads

См. также

Внешние ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads