不能同时运行烧瓶和 scapy

时间:2021-04-29 09:38:25

标签: python flask scapy flask-socketio

需要的是服务器把它的网络数据发送给所有的客户端,客户端显示数据。
这是服务器代码。

from flask import Flask
from flask_cors import CORS
from flask_socketio import SocketIO, send
import scapy.all as scapy

app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*")

@app.route('/')
def home():
    return 'hey!'

@socketio.on('connect')
def test_connect():
    print('connected')

def send_sniffed_packet(packet):
    socketio.emit('packet', packet, broadcast=True)

if __name__ == "__main__":
    socketio.run(app)
    scapy.sniff(prn=send_sniffed_packet)

问题是,如果代码运行套接字,它不会运行 scapy,我交换了 scapy 将运行而flask 不会运行的行。如何让两者都运行?
这是html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.0.1/socket.io.js" integrity="sha512-q/dWJ3kcmjBLU4Qc47E4A9kTB4m3wuTY7vkFJDTZKjTs8jhyGQnaUrxa0Ytd0ssMZhbNua9hE+E7Qv1j+DyZwA==" crossorigin="anonymous"></script>
</head>
<body>
    <div></div>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var socket = io.connect('http://localhost:5000');

            socket.on('connect', () => {
                console.log("Connected");
            });
            socket.on('packet', (msg)=>{
                console.log(msg);
            })
        });
    </script>    
</body>
</html>

1 个答案:

答案 0 :(得分:0)

尝试在后台线程中运行其中一个进程。例如:

if __name__ == "__main__":
    socketio.start_background_task(scapy.sniff, prn=send_sniffed_packet)
    socketio.run(app)