Лучшие вопросы
Таймлайн
Чат
Перспективы
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
См. также
Внешние ссылки
- http://www.upnp.org/ - The Universal Plug and Play Forum
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads