Search code examples
pythonnetwork-programmingnatupnp

Python UPnP/IGD Client Implementation?


I am searching for an open-source implementation of an UPnP client in Python, and more specifically of its Internet Gateway Device (IGD) part.

For now, I have only been able to find UPnP Media Server implementations, in projects such as PyMediaServer, PyMedS, BRisa or Coherence.

I am sure I could use those code bases as a start, but the Media Server part will introduce unneeded complexity.

So can you recommend a client UPnP (and hopefully IGD) Python library? An alternative would be to dispatch calls to a C library such as MiniUPnP, but I would much prefer a pure Python implementation.

Update: an interesting, kind of related discussion of SSDP and UPnP is available on StackOverflow.


Solution

  • MiniUPnP source code contains a Python sample code using the C library as an extension module (see testupnpigd.py), which I consider as a proper solution to my problem.

    Rationale: this is not the pure Python solution I was looking for, but:

    • significant effort has already been invested in this library,
    • it is lightweight (it does not address Media Server issues),
    • IGD is typically only used at connection setup, so not integrating it tighter with the Python code does not seem like an issue,
    • as a bonus, it also provides a NAT-PNP implementation (the Apple concurrent of IGD, part of Bonjour).