본문 바로가기
공부/파이썬 Python

Python 대역폭 모니터 만들어보기 (Bandwidth Monitor Using Python)

by 혼밥맨 2022. 3. 17.
반응형

Python 대역폭 모니터 만들어보기 (Bandwidth Monitor Using Python)

 

 

Python으로 PC의 데이터 수송신 현황을 모니터할 수 있는 대역폭 모니터를 만들어보겠습니다.

 

로직은 간단합니다. 프로그램을 동작하기 시작했을 때의 수신 데이터, 송신 데이터를 저장합니다. 그 이후에 발생하는 수신 데이터와 송신 데이터에서 초기 수송신 데이터를 뺀 데이터 값을 매 초 마다 모니터 화면에 띄우는 것입니다.

 

어렵게 들릴 수 있지만 psutil이라는 라이브러리만 import한다면 아주 쉽게 작성할 수 있습니다.

 

그냥 util도 아니고 psutilprocess and system utilities의 줄임말입니다. 

 

0. 필요 라이브러리

1
2
import time
import psutil
cs

 

1. 초기 수송신 데이터 저장하기

1
2
3
last_received = psutil.net_io_counters().bytes_recv
last_sent = psutil.net_io_counters().bytes_sent
last_total = last_received + last_sent
cs

 

2. 현재 - 과거 데이터 빼기

1
2
3
4
5
6
7
8
while True:
    bytes_received = psutil.net_io_counters().bytes_recv
    bytes_sent = psutil.net_io_counters().bytes_sent
    bytes_total = bytes_received + bytes_sent
    
    new_received = bytes_received - last_received
    new_sent = bytes_sent - last_sent
    new_total = bytes_total - last_total 
cs

 

3. Byte to Megabyte 변환하기

1
2
3
mb_    tal = new_total / 1024 / 1024
mb_new_sent = new_sent / 1024 / 1024
mb_new_total = new_total / 1024 / 1024
cs

 

4. 출력

1
2
3
4
5
6
7
print(f"{mb_new_received:.2f} MB received, {mb_new_sent:.2f} MB sent, {mb_new_total:.2f} MB total")
    
last_received = bytes_received
last_sent = bytes_sent
last_total = bytes_total
    
time.sleep(1)
cs

 

5. Full Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import time
import psutil
 
last_received = psutil.net_io_counters().bytes_recv
last_sent = psutil.net_io_counters().bytes_sent
last_total = last_received + last_sent
 
while True:
    bytes_received = psutil.net_io_counters().bytes_recv
    bytes_sent = psutil.net_io_counters().bytes_sent
    bytes_total = bytes_received + bytes_sent
 
    
    new_received = bytes_received - last_received
    new_sent = bytes_sent - last_sent
    new_total = bytes_total - last_total 
 
    mb_new_received = new_received / 1024 / 1024
    mb_new_sent = new_sent / 1024 / 1024
    mb_new_total = new_total / 1024 / 1024
 
 
    print(f"{mb_new_received:.2f} MB received, {mb_new_sent:.2f} MB sent, {mb_new_total:.2f} MB total")
 
    last_received = bytes_received
    last_sent = bytes_sent
    last_total = bytes_total
 
    time.sleep(1)
cs

 

 

6. 결과

모니터 프로그램을 작동시키고 아무것도 실행하지 않았을 때의 모니터 현황입니다. 어떤 것도 다운로드 받고 있지 않고 업로드하고 있지 않으니 0mb received, 0mb sent라고 나옵니다.

 

 

구글을 실행했습니다. 구글이라는 홈페이지를 다운로드 받은 것이죠.

 

모니터에 변화가 조금씩 생겼습니다. 구글에서 무언가를 검색했더니 sent에도 변화가 생깁니다. 자유롭게 테스트해보세요.

 

반응형

댓글