需要的是服务器把它的网络数据发送给所有的客户端,客户端显示数据。
这是服务器代码。
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>
答案 0 :(得分:0)
尝试在后台线程中运行其中一个进程。例如:
if __name__ == "__main__":
socketio.start_background_task(scapy.sniff, prn=send_sniffed_packet)
socketio.run(app)