标签: upnp

Python UPnP/IGD客户端实现?

我正在寻找一个Python 的UPnP客户端的开源实现,更具体地说是它的Internet网关设备(IGD)部分.

目前,我只能在PyMediaServer,PyMedS,BRisaCoherence等项目中找到UPnP媒体服务器实现.

我确信我可以使用这些代码库作为开始,但媒体服务器部分将引入不必要的复杂性.

那么你能推荐一个客户端UPnP(希望是IGD)Python库吗?另一种方法是将调用调用到诸如MiniUPnP之类的C库,但我更喜欢纯Python实现.

更新:StackOverflow上提供了一个有趣的SSDP和UPnP相关讨论.

python networking upnp nat

12
推荐指数
1
解决办法
7615
查看次数

C#4,COM互操作和UPnP:一个尝试三巨头

我正在尝试编写一些使用UPnP进行NAT遍历的代码(仅供家庭使用),使用C#4和Microsoft的基于COM的NAT遍历API(Hnetcfg.dll).

不幸的是(或者幸运的是)我最后一次在.NET中使用COM互操作是在最后一个冰河时代的某个时候,我似乎对C#使用动态类型进行互操作以及如何编写回调感到困惑(所以COM服务器调用我的托管代码).

这是令人兴奋的几行代码:

// Referencing COM NATUPNPLib ("NATUPnP 1.0 Type Library")

using System;
using NATUPNPLib;

class NATUPnPExample
{
    public delegate void NewNumberOfEntriesDelegate(int lNewNumberOfEntries);

    public static void NewNumberOfEntries(int lNewNumberOfEntries)
    {
        Console.WriteLine("New number of entries: {0}", lNewNumberOfEntries);
    }

    public static void Main(string[] args)
    {
        UPnPNAT nat = new UPnPNAT();
        NewNumberOfEntriesDelegate numberOfEntriesCallback = NewNumberOfEntries;

        nat.NATEventManager.NumberOfEntriesCallback = numberOfEntriesCallback;

        nat.StaticPortMappingCollection.Add(4555, "TCP", 4555, "192.168.0.1", true, "UPnPNAT Test");

        // Presumably my NewNumberOfEntries() method should be called by the COM component about now

        nat.StaticPortMappingCollection.Remove(4555, "TCP");
    } …
Run Code Online (Sandbox Code Playgroud)

com upnp idispatch c#-4.0

11
推荐指数
1
解决办法
519
查看次数

自动端口转发(UPnP?)C++

免责声明: 我在这里仔细阅读了所有类似主题,并进行了谷歌搜索.没有回答我的问题,所以我想在这个主题中积累信息.PS我的英语可能不太好,抱歉.

我想制作一个p2p应用程序(游戏).显然很多人会在一台机器上运行这个程序,这台机器是本地网络的一部分,有一个互联网接入点(路由器),如果没有端口转发,应用程序就无法运行.所以,我做了一项研究,发现我可以使用UPnP进行自动端口转发.编写微测试代码以访问端口转发:

bool CPortController::Init() {


  HRESULT result = CoInitialize(NULL); // Must be NULL
  if (FAILED(result)) return false;

  result = CoCreateInstance(__uuidof(UPnPNAT), NULL, CLSCTX_ALL, __uuidof(IUPnPNAT), (void **)&Nat);
  if (FAILED(result) || !Nat) return false;

  result = Nat->get_StaticPortMappingCollection(&Collection); 
  if (FAILED(result) || !Collection) return false; // Here I'm getting S_OK as result, but Collection is always == 0

  return true;
}
Run Code Online (Sandbox Code Playgroud)

搜索到的原因(参见代码注释)发现我发现:1.旧系统(不,我有Win7更新)2.路由器可能没有UPnP功能或者可能没有启用3.防火墙可能阻塞TCP端口2869或UDP端口1900都是UPnP所需的

可悲的是,我没有访问路由器来检查最后2,但它并不重要,因为Skype和uTorrent(两个p2p)完美运行.我需要找到使用我的应用程序自动执行相同技巧和转发端口的方法,而无需要求用户执行任何操作.

关于UPnP库: 我发现很少有UPnP库(PlatinumUPnP,miniUPnP),但他们似乎有很多代码可以找到智能设备并将它们组合在一起......呃...我不确定我需要这个完成我的任务,我找不到一段代码(不使用上面列出的那些WinUPnPAPI)进行自动端口转发.

我现在有点迷路了.谁能告诉我继续研究的方向?也许除了UPnP还有别的东西吗?也许有一个lib(我错过了)使用?请点亮一些光.先感谢您.

c++ upnp portforwarding

11
推荐指数
1
解决办法
8827
查看次数

执行UPNP扫描不会返回飞利浦Hue Bridge

我正在尝试实现我自己的UpNP扫描,它主要是工作,并且为了证明这不是我,我有一个Windows程序,允许您发送数据包,看看有什么响应回来.

我正在向239.255.255.250端口发送数据包1900,我发送以下数据:

M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
Man: "ssdp:discover"
MX: 10
ST: ssdp:all
Run Code Online (Sandbox Code Playgroud)

只是为了进一步的信息,在我的Java代码(Android)中,我有以下内容,但我得到与数据包测试器应用程序相同的响应:

try
        {
            byte[] sendData = new byte[1024];
            //byte[] receiveData = new byte[1024];
            byte[] receiveData;
            String mSearch = "M-SEARCH * HTTP/1.1\r\nHost: 239.255.255.250:1900\r\nMan: \"ssdp:discover\"\r\nMX: 10\r\nST: ssdp:all\r\n\r\n";
            sendData = mSearch.getBytes();

            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("239.255.255.250"), 1900);

            DatagramSocket clientSocket = new DatagramSocket();
            clientSocket.send(sendPacket);

            while (keepGoing)
            {
                receiveData = new byte[1024];
                receivePacket = new DatagramPacket(receiveData, receiveData.length);
                clientSocket.receive(receivePacket);

                String response = new String(receivePacket.getData());

                if (response == …
Run Code Online (Sandbox Code Playgroud)

java android upnp philips-hue

11
推荐指数
1
解决办法
1365
查看次数

UPnP AV和DLNA有什么区别?

我是否正确地认为如果我符合DLNA 1.5,我实施了UPnP AV?除了指定最低格式要求外,DLNA还能得到什么?DLNA不是建立在UPnP之上吗?我确信DLNA设备发现完全基于SSDP(UPnP的设备发现协议).DLNA是否在内容发现或内容交付规范中添加了一些内容?

例如,Boxee和XBMC都支持UPnP - 它们不适用于所有DLNA设备吗?

upnp dlna

10
推荐指数
2
解决办法
1万
查看次数

如何指导创建uPNP iPhone应用程序?

我想创建一个通过uPNP管理Windows计算机的iPhone应用程序.Windows计算机将是我控制的设备,iPhone将成为控制器.

我几乎把它缩小到uPNP作为我的选择解决方案,Platinum uPNP就是图书馆.我的问题是,我该如何实现呢?是否有一个简单的教程或示例源代码,用于使用Platinum uPNP创建iPhone uPNP控制点?(或任何其他图书馆)

.net windows iphone upnp

9
推荐指数
1
解决办法
1636
查看次数

通过Python中的UPnP转发端口

我正在制作一个Python应用程序,要求用户将端口转发到他的计算机,以便与服务器或其他用户进行通信.当前的实现工作非常好,但唯一的事情是运行该文件的人必须手动将端口转发到本地IP.我想自动化这个.他选择一个端口,脚本检查是否可以转发,然后转发它.如果不能,则分别处理错误.

我已经研究了一些声称可以在纯Python中执行此操作的库(因为我需要在完成后编译为.exe的[...])但是却找不到有用的东西.如果您可以向我提供有关如何尝试转发端口并分别处理成功/失败的代码示例,那将非常棒.

在此先感谢您的时间.

PS:我的目标是Python 2.7.X

python upnp python-2.7

9
推荐指数
1
解决办法
2853
查看次数

为什么我们有UPnP时DIAL(发现和发布)?

我正在浏览DIAL的功能,发现它与UPnP非常相似,实际上它使用UPnP协议进行设备发现(SSDP).

什么拨号提供,实际上是UPnP协议的子集,不是吗?我们不能使用UPnP的SOAP进行内容共享和通信(启动应用程序)而不是DIAL吗?

我没有清楚地了解DIAL适合软件堆栈的情况(如果我已经支持UPnP).

请帮我清除我的困惑.

upnp

9
推荐指数
1
解决办法
3728
查看次数

使用PHP获取DLNA信息

我在Raspberry Pi上有一个DLNA服务器(可以使用miniDLNA).我有另一个带有Web服务器的Raspberry Pi(使用nGinx).

我想在Web服务器上使用我的PHP代码获取有关我的DLNA服务器的信息(扫描DLNA服务器,获取文件列表等).

我怎样才能做到这一点?是否可以在PHP中与DLNA通信?

注意:我发现了这个:https://github.com/jalder/UPnP但它不再更新,它不适用于miniDLNA 1.1.2(Jessie).另外我想自己做!

php upnp dlna

9
推荐指数
1
解决办法
1928
查看次数

UPnP检测延迟

我在Raspberry Pi上安装了RaspBMC,在Window笔记本电脑上安装了XBMC,在我的Android设备上安装了UPnPlay.Raspberry Pi始终处于打开状态,旨在充当系统的服务器.

IP地址涉及:

  • 192.168.0.18:RPi

  • 192.168.0.13:笔记本电脑

  • 192.168.0.1:路由器

当我将Android设备连接到WiFi并打开UPnPlay或在笔记本电脑上启动XBMC时,之前在Raspberry Pi出现在设备列表中之前会有5-10分钟的延迟.然而,在过去的几周里,除非我在其他服务(XBMC或UPnPlay)运行时重启它,否则Pi根本不会出现.我可以ssh和sftp到Pi,并且可以从两个设备访问RaspBMC的Web界面,没有任何问题.

是否可能以某种方式丢失或阻止UPnP网络发现/通知消息?我该怎么调查这个?我对网络的了解仅限于端口转发.

我对UPnP的替代协议的建议持开放态度 - 我遇到的第一个很简单,它在我之前的设置(桌面上的XBMC将媒体发送到Apple TV)上工作得很好.


编辑:

在笔记本电脑上使用Wireshark进行的一些分析显示笔记本电脑的行为符合预期 - 通过SSDP定期发送M-SEARCH和NOTIFY数据包到239.255.255.250(我认为是多播地址).但是,RPi不仅没有响应这些带有单播数据包的数据包(正如维基百科建议的那样),而且除了在启动时它也没有发送任何SSDP数据包.

我对Wireshark和网络分析一般都很陌生,但我真的很感激你能给出的任何指导或建议.

我使用的Wireshark过滤器是"(udp.dstport == 1900或ip.addr == 192.168.0.18)和!(ip.src == 192.168.0.1)",其中192.168.0.18是我的RPi地址 - 我相信这是正确的,但正如我所说,我对Wireshark很新 - 请纠正我,如果我犯了错误!特别是,我假设RPi对M-SEARCH的多播响应会有ip.src = 192.168.0.18,但我不确定(可能是192.168.0.1或239.255.255.250)


编辑2:

这篇文章的指导下,我跑了/sbin/route -n,并获得了以下输出.

pi@raspbmc:~$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
Run Code Online (Sandbox Code Playgroud)

我不知道如何解释这个,但是,从链接线程中的其他注释来看,这似乎缺少多播条目.再一次,根据链接线程的建议,我运行sudo route add -net 239.0.0.0 netmask 255.0.0.0 eth0,添加了这个 …

upnp xbmc raspberry-pi

8
推荐指数
1
解决办法
5601
查看次数