[Twisted-Python] send-msearch on all network interfaces of a machine

Pratik Prajapati pratik.prajapati12 at gmail.com
Sat Jun 14 06:48:36 MDT 2014


Hi,

I am implementing a code through which i have to get devices connected to
all network interfaces on my machine and list them .

For this, i am first getting the ip of all network interfaces and then
sending m-search command on them.

After 2.5 seconds port is stopped to listen.

But it is giving me some assertion error. (I am connected to 2 interfaces
-ethernet and wifi)

`Code:`

    class Base(DatagramProtocol):
        """ Class to send M-SEARCH message to devices in network and
receive datagram
            packets from them
        """
        SSDP_ADDR = "239.255.255.250"
        SSDP_PORT = 1900
        MS = "M-SEARCH * HTTP/1.1\r\nHOST: {}:{}\r\nMAN:
'ssdp:discover'\r\nMX: 2\r\nST: ssdp:all\r\n\r\n".format(SSDP_ADDR,
SSDP_PORT)

    def sendMsearch(self):
        """ Sending M-SEARCH message
        """
        ports = []
        for address in self.addresses:
            ports.append(reactor.listenUDP(0, self, interface=address))

        for port in ports:
            for num in range(4):
                port.write(Base.MS, (Base.SSDP_ADDR,Base.SSDP_PORT))
            reactor.callLater(2.5, self.stopMsearch, port) # MX + a wait
margin


    def stopMsearch(self, port):
        """ Stop listening on port
        """
        port.stopListening()


`Error:`
    Traceback (most recent call last):
  File "work\find_devices.py", line 56, in sendMsearch
 ports.append(reactor.listenUDP(0, self, interface=address))
  File "C:\Python27\lib\site-packages\twisted\internet\posixbase.py", line
374, in listenUDP
 p.startListening()
  File "C:\Python27\lib\site-packages\twisted\internet\udp.py", line 172,
in startListening
 self._connectToProtocol()
  File "C:\Python27\lib\site-packages\twisted\internet\udp.py", line 210,
in _connectToProtocol
 self.protocol.makeConnection(self)
  File "C:\Python27\lib\site-packages\twisted\internet\protocol.py", line
709, in makeConnection
 assert self.transport == None
AssertionError



This code worked:

def sendMsearch(self):
        """ Sending M-SEARCH message
        """
        address = socket.gethostbyname(socket.gethostbyname())
        port = reactor.listenUDP(0, self, interface=address)
        for num in range(4):
                port.write(Base.MS, (Base.SSDP_ADDR,Base.SSDP_PORT))
        reactor.callLater(2.5, self.stopMsearch, port) # MX + a wait margin




Please tell what's wrong in code mentioned in the start of this mail and
how to correct this.

I have also posted this code on stackoverflow , but didn't get any response
http://stackoverflow.com/questions/24178580/send-m-search-packets-on-all-network-interfaces-using-twisted-module-in-python
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://twistedmatrix.com/pipermail/twisted-python/attachments/20140614/9f337317/attachment.html>


More information about the Twisted-Python mailing list