2012-01-22 31 views
9

Actualmente estoy escribiendo un programa para apagar una computadora cuando durante un período de tiempo (digamos, media hora) el tráfico de red está por debajo de cierto umbral.Medir datos de red con Python

Aquí está el pseudocódigo que he trabajado dará la lógica correcta:

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 

Lo que estoy buscando es el módulo de Python o biblioteca que me va a permitir medir esto.

Si bien tengo donevariousresearch en esto, estos no parecen ser el tipo de funcionalidad que estoy buscando, independientemente de su idioma.

¿Alguna idea sobre cómo implementar esto?

Respuesta

19

Para comprobar el tráfico de red en su sistema, le recomiendo que busque en 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)} 
>>> 

Y para apagar el sistema operativo, si está en ventanas comprobar esto: OS Reboot, Shutdown, Hibernate, Sleep, Wakeup (Windows Python)

y si están usando linux/unix, use el módulo subprocess para enviar el comando shutdown/reboot.

+0

Voy a mirar en él. No estaba teniendo problemas con el cierre, así que extra puntos de brownie para esto. Marcaré correcto si todo funciona. – nchpmn

+0

¡Funciona, gracias! – nchpmn

+0

¿Cada una de estas estadísticas por segundo? – travis1097

-2

y se puede monitorear el uso de la red y escribir paquetes en un archivo con la biblioteca de archivos simplemente así:

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

¿Podría por favor [editar] una explicación más completa de por qué este código responde la pregunta? Las respuestas de solo código están [desaconsejadas] (http://meta.stackexchange.com/q/148272/274165), porque no enseñan la solución. –

Cuestiones relacionadas