Wave-Net / wavenet-backend

packet capture logic using scapy library
0 stars 0 forks source link

feat: FastAPI 서버 구현, 패킷 트래픽 모니터링 기능 구현, 스레드 로직 개선 #50

Closed zhy2on closed 2 months ago

zhy2on commented 2 months ago

Issue

46 #48 #49

Details

image image

클라이언트 접속이 되면 1초에 한 번씩 네트워크 인터페이스에 연결된 장치들을 확인.

새로 추가된 장치들은 sniffer 인스턴스를 새로 생성하고 sniffer.start()

없어진 장치들은 sniffer.stop() 하고 해당 sniffer 객체를 None으로 만들기 (sniffer.stop()을 한 스레드는 재사용이 불가능함.)

접속만 한 경우에는 패킷 정보를 보내지 않고 1초에 한 번씩 통계 메시지 즉, stat_info 만 보낸다.

클라이언트에서 'start_capture' 메시지가 오면 메시지의 'device_ip'를 확인하고 해당 하는 ip의 sniffer를 start_packet_send() 메서드를 실행한다.(packet_send_event.set()으로 플래그 값을 변경함)

클라이언트에서 'stop_capture' 메시지가 오면 start_packet_send() 를 한다. (self.packet_send_event.clear())

Sniffer클래스를 threading.Thread를 상속받아 만들었기 때문에 스니핑 관련 로직은 thread로 실행이 된다. 그래서 비동기 작업을 할 수 있음.

왜 Sniffer 클래스를 스레드를 사용하여 구현했냐면 scapy의 sniff 함수가 동기 함수이기 때문에 async def로 구현을 해도 비동기로 실행이 되지 않았기 때문에.