每次我使用scapy的send()函数时,它似乎打开/使用/访问/ dev / bpf设备,并且在我退出脚本之前似乎永远不会释放它们。我不完全理解/ dev / bpf,除了它代表Berkley数据包过滤器,但问题是它在我的机器上达到了极限似乎是/ dev / bpf255我的脚本崩溃做了“太多打开文件”。
代码:
from scapy.all import *
import threading
q = 0
def printit():
global q
q += 1
print(q)
threading.Timer(1.0, printit).start()
data= "Test"
a = IP(dst="255.255.255.255")/UDP(dport=3520)/data
send(a)
printit()
错误:
File "/usr/local/lib/python3.6/site-packages/scapy/sendrecv.py", line 73, in sndrcv
rdpipe,wrpipe = os.pipe()
OSError: [Errno 24] Too many open files
我假设它是由/ dev / bpf设备引起的,因为当我运行时:
lsof |grep {script pid}
我看到对于每个发送的数据包,似乎还有一个/ dev / bpf。
例如我的grep结果是:
Python 39601 user 91w CHR 23,44 0t107 15141 /dev/bpf44
他们永远不会被释放。我似乎无法弄清楚如何清理它。