diff --git a/python/opendht.pyx b/python/opendht.pyx
index 6b4af8ffe606968b6612daa853c770660cef66ba..bf4872e60b3cbd0b536ea97e01ed019b860cbdef 100644
--- a/python/opendht.pyx
+++ b/python/opendht.pyx
@@ -158,6 +158,15 @@ cdef class SockAddr(object):
         return self.toString().decode()
     def __repr__(self):
         return "<%s '%s'>" % (self.__class__.__name__, str(self))
+    @staticmethod
+    def resolve(str host, str service=None):
+        vals = []
+        result = cpp.SockAddr.resolve(host.encode(), service.encode() if service else b'')
+        for val in result:
+            a = SockAddr()
+            a._addr = val
+            vals.append(a)
+        return vals
 
 cdef class Node(_WithID):
     cdef shared_ptr[cpp.Node] _node
diff --git a/python/opendht_cpp.pxd b/python/opendht_cpp.pxd
index 3cc145ee20bd02cb213a6b9c545bb9bfcf1673de..74c0a015b677b076d08ab0b8f59a4df142b83fc0 100644
--- a/python/opendht_cpp.pxd
+++ b/python/opendht_cpp.pxd
@@ -86,6 +86,8 @@ cdef extern from "opendht/sockaddr.h" namespace "dht":
         bool isLoopback() const
         bool isPrivate() const
         bool isUnspecified() const
+        @staticmethod
+        vector[SockAddr] resolve(string host, string service) except +
 
 ctypedef vector[uint8_t] Blob