2012-01-22 10 views
9

Obecnie piszę program do wyłączenia komputera, gdy przez pewien czas (powiedzmy, pół godziny) ruch w sieci jest poniżej pewnego progu.Zmierz dane sieciowe za pomocą Pythona

Oto pseudokod że pracowałem da poprawną logiką:

BEGIN SUBPROGRAM 
    loopFlag = True 
    Wait 5 minutes # Allows time for boot and for the machine to settle 
    traffic = 0 
    WHILE loopFlag = True DO 
     FOR sec = 0 to 3600 
      traffic += *network.traffic()* 
      wait 1 second 
     ENDFOR 
     IF traffic < trafficThreshold THEN 
      loopFlag = False 
     ENDIF 
    ENDWHILE 
    os.ShutDown() 
END SUBPROGRAM 

Co szukam jest moduł Pythona lub biblioteka, która pozwoli mi to zmierzyć.

Podczas gdy mam donevariousresearch do tego, nie wydają się być tego rodzaju funkcjami, których szukam, niezależnie od ich języka.

Jakieś pomysły dotyczące wdrożenia?

Odpowiedz

19

Aby sprawdzić ruch sieciowy w systemie, polecam zajrzeć do psutilhere:

>>> psutil.network_io_counters(pernic=True) 
{'lo': iostat(bytes_sent=799953745, bytes_recv=799953745, packets_sent=453698, packets_recv=453698), 
'eth0': iostat(bytes_sent=734324837, bytes_recv=4163935363, packets_sent=3605828, packets_recv=4096685)} 
>>> 

A do zamykania systemu operacyjnego, jeśli jesteś na windows to sprawdzić: OS Reboot, Shutdown, Hibernate, Sleep, Wakeup (Windows Python)

a jeśli używają linux/, użyj modułu subprocess do wysłania polecenia shutdown/reboot.

+0

będę zaglądać. Nie miałem problemów z wyłączaniem, więc dodatkowe punkty duszności za to. Zaznaczę poprawnie, jeśli wszystko działa. – nchpmn

+0

Działa, dziękuję! – nchpmn

+0

Czy każda z tych statystyk na sekundę? – travis1097

-2

i można monitorować ruch w sieci i zapisywać pakiety w jednym pliku z biblioteką plików po prostu tak:

import socket 
HOST = socket.gethostbyname(socket.gethostname()) 
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) 
s.bind((HOST, 0)) 
while True: 
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1) 
# receive all packages 
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON) 
# receive a package 
newfile = open("results.txt", "at") 
packets = (s.recvfrom(65565)[0],"hey", s.recvfrom(65565)[1]) 
newfile.write(str(packets[0])) 
newfile.write(str(packets[1])) 
newfile.write("\n") 
newfile.close() 
print (s.recvfrom(65565)) 
+3

Czy możesz prosić [edytuj] w pełniejszym wyjaśnieniu, dlaczego ten kod odpowiada na pytanie? Odpowiedzi tylko na kod są zniechęcane (http://meta.stackexchange.com/q/148272/274165), ponieważ nie uczą rozwiązania. –

Powiązane problemy