728x90
네트워크 정보 구하기
함수 설명입니다.
- psutil.net_io_counters() : 패킷의 양(bytes), 패킷, 에러 패킷, 드랍 패킷의 in/out 통계 정보
- psutil.net_connections() : 시스템 전체 소켓 연결 정보
>>> import psutil
>>>
>>> psutil.net_io_counters()
snetio(bytes_sent=7648826, bytes_recv=110431184, packets_sent=48590, packets_recv=97335, errin=0, errout=0, dropin=0, dropout=0)
테스트해보니 누적된 데이터입니다.
어댑터 정보를 열어서 비교해봅니다.
import psutil
from time import sleep
while True:
net = psutil.net_io_counters()
sent = round(net.bytes_sent/1024**2, 1)
recv = round(net.bytes_recv/1024**2, 1)
print(f'sent: {sent}MB / recv: {recv}MB', end='\r')
sleep(1)
더보기
sent: 7.4MB / recv: 105.5MB
소켓연결정보 입니다.
>>> import psutil
>>> for c in psutil.net_connections():
... print(c)
... break
...
sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='127.0.0.1', port=5202), raddr=addr(ip='127.0.0.1', port=5203), status='ESTABLISHED', pid=15168)
연결 상태가 ESTABLISHED 인 항목의 pid, ip, port를 출력해봅니다.
import psutil
conns = psutil.net_connections()
for con in conns:
if con.status == 'ESTABLISHED':
print(f'ip: {con.raddr.ip} | port: {con.raddr.port} | pid: {con.pid}')
더보기
ip: 210.103.251.12 | port: 443 | pid: 15168
ip: 211.115.106.206 | port: 80 | pid: 5340
ip: 127.0.0.1 | port: 2290 | pid: 5804
ip: 127.0.0.1 | port: 3095 | pid: 17504
ip: 211.115.106.206 | port: 80 | pid: 5340
ip: 64.233.189.188 | port: 5228 | pid: 12772
ip: 110.76.141.203 | port: 443 | pid: 15168
ip: 127.0.0.1 | port: 2289 | pid: 5804
ip: 117.18.232.200 | port: 443 | pid: 13084
ip: 127.0.0.1 | port: 3094 | pid: 17504
ip: 127.0.0.1 | port: 5202 | pid: 15168
ip: 127.0.0.1 | port: 5203 | pid: 15168
ip: 211.115.106.206 | port: 80 | pid: 5340
ip: 40.90.185.223 | port: 443 | pid: 8144
ip: 40.90.189.152 | port: 443 | pid: 5268
pid 를 이용하여 프로세스 이름까지 구해봅니다.
시스템 전체의 프로세스 리스트를 구할 때는 process_iter() 를 사용합니다.
import psutil
net = {}
conns = psutil.net_connections()
for con in conns:
if con.status == 'ESTABLISHED':
net.setdefault(con.pid, con.raddr)
procs = psutil.process_iter(['pid', 'name', 'username'])
for p in procs:
if p.pid in net.keys():
print(f'pid: {p.pid} | name: {p.name()} | ip: {net[p.pid].ip} | port: {net[p.pid].port}')
더보기
pid: 5268 | name: svchost.exe | ip: 40.90.189.152 | port: 443
pid: 5340 | name: ASDSvc.exe | ip: 211.115.106.208 | port: 80
pid: 5804 | name: Code.exe | ip: 127.0.0.1 | port: 2289
pid: 6240 | name: Code.exe | ip: 111.221.29.254 | port: 443
pid: 8144 | name: svchost.exe | ip: 40.90.185.223 | port: 443
pid: 12772 | name: chrome.exe | ip: 64.233.189.188 | port: 5228
pid: 15168 | name: KakaoTalk.exe | ip: 210.103.251.12 | port: 443
pid: 17504 | name: Code.exe | ip: 127.0.0.1 | port: 3095
작업관리자(네트워크) 구현하기
psutil.net_io_counters() 를 활용해서 실시간 I/O 를 구현해봅니다. (싱크..)
'Language > Python' 카테고리의 다른 글
파이썬 sqlite3 사용하기 -2 : 테이블 생성 예외처리 (0) | 2020.07.20 |
---|---|
파이썬 sqlite3 사용하기 -1 : 데이터타입, 기본 사용법 (0) | 2020.07.20 |
파이썬 psutil 모듈 사용하기 -2 : 디스크 정보 구하기 (0) | 2020.07.16 |
파이썬 psutil 모듈 사용하기 -1 : CPU, 메모리 정보 구하기 (0) | 2020.07.16 |
파이썬 XML Pretty 출력하기 (0) | 2020.07.15 |