UPnP

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Universal Plug and Play (UPnP) — набор сетевых протоколов, публикуемых форумом UPnP. Цель UPnP — универсальная автоматическая настройка сетевых устройств, как дома, так и в корпоративной среде. Состоит из набора сопутствующих протоколов, построенных на открытых интернет-стандартах.

Описание UPnP[править | править вики-текст]

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

UPnP Forum[править | править вики-текст]

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

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

Технические элементы[править | править вики-текст]

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

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

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

Проброс портов[править | править вики-текст]

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

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,  WinSock ,
   oleAuto, Vcl.StdCtrls;
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

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;
  SavedCW: Word;
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);{Первый раз Port - это какой порт пробрасывать на роутере, второй раз Port задаёт, на какой порт компьютера придёт пакет. В принципе, можно задать и разные порты.}
  end;

except on E:Exception do
  ShowMessage('An Error occured with adding UPnP Ports. '+E.Message);
end;
  end;
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
AddUPnPEntry(1234, 'KAM', GetLocalIP);//Проброс порта 1234
end;

end.

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

На языке C# проброс портов рассмотрен в этой статье.

См. также[править | править вики-текст]

Внешние ссылки[править | править вики-текст]

UPnP Forum