Scapy sndrcv blocks Twisted reactor.
At 2013-09-25 10:22:54 None wrote: ooni depends on scapy for several tests, however, the underlying methods used rely upon methods that are not safe to use with Twisted. See the various blocking loops and use of select() inside method sndrcv() in scapy/sendrecv.py
A possible solution is described here: http://stackoverflow.com/questions/13149703/is-it-possible-to-use-raw-sockets-with-twisted-python
Performing query to google.com with 10.211.0.10:53
[D] Running sr1
[!] Task <ooni.tasks.Measurement object at 0x26edb10> has failed 3 times
Traceback (most recent call last):
File "/home/ooni/code/ooni-probe/ooni/tasks.py", line 38, in start
self._running = defer.maybeDeferred(self.run)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 137, in maybeDeferred
result = f(*args, **kw)
File "/home/ooni/code/ooni-probe/ooni/tasks.py", line 130, in run
d = self.netTestMethod()
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1213, in unwindGenerator
return _inlineCallbacks(None, gen, Deferred())
--- <exception caught here> ---
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/twisted/internet/defer.py", line 1070, in _inlineCallbacks
result = g.send(result)
File "/home/ooni/code/ooni-probe/ooni/nettests/manipulation/dnsspoof.py", line 69, in test_a_lookup
self.report['test_a_lookup']['answered_packets'] = yield self.sr1(question)
File "/home/ooni/code/ooni-probe/ooni/templates/scapyt.py", line 128, in sr1
d = scapySender.startSending(packets)
File "/home/ooni/code/ooni-probe/ooni/utils/txscapy.py", line 271, in startSending
self.sendPackets(packets)
File "/home/ooni/code/ooni-probe/ooni/utils/txscapy.py", line 256, in sendPackets
self.factory.send(packet)
File "/home/ooni/code/ooni-probe/ooni/utils/txscapy.py", line 151, in send
return self.super_socket.send(packet)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/arch/linux.py", line 387, in send
sx = str(ll(x))
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/packet.py", line 263, in __str__
return self.build()
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/packet.py", line 321, in build
p = self.do_build()
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/packet.py", line 310, in do_build
pkt = self.self_build()
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/packet.py", line 301, in self_build
p = f.addfield(self, p, val)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/fields.py", line 70, in addfield
return s+struct.pack(self.fmt, self.i2m(pkt,val))
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/layers/l2.py", line 94, in i2m
return MACField.i2m(self, pkt, self.i2h(pkt, x))
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/layers/l2.py", line 88, in i2h
x = conf.neighbor.resolve(pkt,pkt.payload)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/layers/l2.py", line 38, in resolve
return self.resolvers[k](l2inst,l3inst)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/layers/inet.py", line 727, in <lambda>
conf.neighbor.register_l3(Ether, IP, lambda l2,l3: getmacbyip(l3.dst))
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/layers/l2.py", line 72, in getmacbyip
nofilter=1)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/sendrecv.py", line 375, in srp1
a,b=srp(*args,**kargs)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/sendrecv.py", line 358, in srp
a,b=sndrcv(s ,x,*args,**kargs)
File "/home/ooni/.virtualenvs/ooni/local/lib/python2.7/site-packages/scapy/sendrecv.py", line 129, in sndrcv
inp, out, err = select(inmask,[],[], remaintime)
select.error: (4, 'Interrupted system call')
This issue was automatically migrated from github issue https://github.com/TheTorProject/ooni-probe/issues/214