Foros del Web » Programando para Internet » Python »

Modulo o Funcion para obtener informacion de una interfaz de red en Python

Estas en el tema de Modulo o Funcion para obtener informacion de una interfaz de red en Python en el foro de Python en Foros del Web. Hola, aqui novato Python... Escribi una pequeña aplicacion que uso desde la terminal en Linux para llevar un registro de la cantidad de datos de ...
  #1 (permalink)  
Antiguo 30/01/2011, 21:29
Avatar de jam666  
Fecha de Ingreso: septiembre-2009
Ubicación: Isla De Margarita - Venezuela
Mensajes: 428
Antigüedad: 14 años, 7 meses
Puntos: 39
Información Modulo o Funcion para obtener informacion de una interfaz de red en Python

Hola, aqui novato Python...

Escribi una pequeña aplicacion que uso desde la terminal en Linux para llevar un registro de la cantidad de datos de subida y bajada que me consumo en una sesion de conexion a internet (la info la almaceno en MongoDB). Los datos de subida y bajada los introdusco a mano y los leo (visualmente) desde el monitor de sistemas, el caso es que me gustaria automatizar mas mi aplicacion y hacer que la misma lea los datos de subida y bajada consumidos desde la interfaz de red que uso para conectarme a internet (en mi caso PPP0), pero el detalle esta en que no encuentro la manera de hacerlo en Python. Supongo que Python tendra un modulo a importar o algo que me permita realizar lo que quiero, pero hasta ahora en lo que he investigado no he encontrado una manera de realizarlo.

¿Conocen ustedes algun modulo, funcion o similar que me permita realizar en python lo que deseo?

Saludos y gracias de antemano.
__________________
J.A.M
Jam Blog
  #2 (permalink)  
Antiguo 30/01/2011, 21:45
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Ciertamente existe algún modulo, pero no te puedo ayudar sin mas detalles.

Por ejemplo que te gustaría automatizar? (Tengo claro que algo de entrada y salida de datos)
Un ejemplo de alguna entrada, salida esperada y algún tipo de descripción mas detallada ayudaría.

Ademas de poner que es lo que estas haciendo.
  #3 (permalink)  
Antiguo 30/01/2011, 21:58
Avatar de jam666  
Fecha de Ingreso: septiembre-2009
Ubicación: Isla De Margarita - Venezuela
Mensajes: 428
Antigüedad: 14 años, 7 meses
Puntos: 39
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Cita:
Iniciado por razpeitia Ver Mensaje
Ciertamente existe algún modulo, pero no te puedo ayudar sin mas detalles.

Por ejemplo que te gustaría automatizar? (Tengo claro que algo de entrada y salida de datos)
Un ejemplo de alguna entrada, salida esperada y algún tipo de descripción mas detallada ayudaría.

Ademas de poner que es lo que estas haciendo.
Pues simplemente quisiera que la aplicacion tomara los valores de los datos de subida y bajada consumidos (transferidos por la interfaz de red PPP0) para yo almacenarlas en una variable respectivamente y luego guardarla junto con otros datos en una base de datos.

La aplicacion a la que le quiero añadir esa funcion la tengo en GitHub y como puedes ver en el codigo, por ahora la aplicacion toma los datos de subida y bajada que yo escribo (usando un raw_input()), por ende quisiera que fuese la misma aplicacion que tomara dichos datos desde la interfaz de red.

Saludos.
__________________
J.A.M
Jam Blog
  #4 (permalink)  
Antiguo 30/01/2011, 23:58
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Oh man, acabo de ver tu aplicación. Si quieres monitorear la cantidad de trafico que pasa por tu red. Solo has un cron job + ifconfig + python para obtener las estasdisticas del ifconfig.

Si haces un
Código:
ifconfig | python temp.py
Código Python:
Ver original
  1. #temp.py
  2. import sys
  3. import re
  4.  
  5. pattern = re.compile("RX bytes:(\d+).*TX bytes:(\d+)")
  6. for line in sys.stdin:
  7.     m = pattern.search(line)
  8.     if m:
  9.         download, upload = m.groups()
  10.         download, upload = int(download), int(upload)
  11.         print download, upload #En bytes
Aqui un ejemplo de lo facil que puede ser automatizarlo.
  #5 (permalink)  
Antiguo 31/01/2011, 10:44
Avatar de jam666  
Fecha de Ingreso: septiembre-2009
Ubicación: Isla De Margarita - Venezuela
Mensajes: 428
Antigüedad: 14 años, 7 meses
Puntos: 39
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

¡Gracias amigo!, el codigo me funciona bien aunque le tube que realizar una pequeña correccion ya que tal como lo colocaste no me mostraba nada.

Código Python:
Ver original
  1. #!/usr/bin/env python
  2. #temp.py
  3. import sys
  4. import re
  5.  
  6. pattern = re.compile("Bytes RX:(\d+).*TX bytes:(\d+)")
  7. for line in sys.stdin:
  8.     m = pattern.search(line)
  9.     if m:
  10.         download, upload = m.groups()
  11.         download, upload = int(download), int(upload)
  12.         print download, upload #En bytes

y lo ejecuto con:

Código codigo:
Ver original
  1. ifconfig ppp0 | python temp.py

Ya solo me falta hacer que convierta los bytes a Megabytes y añadirlo a la aplicacion para que esta almacene los datos...

Una ultima pregunta: ¿Existe algun modulo Python que puede hacer algo como esto sin necesitad de llamar a ifconfig o similares? ya que creo que si añado este codigo a la aplicacion (asi sea como modulo) necesitare ejecutar mi aplicacion junto con ifconfig para que esta pueda tomar los valores de subida y bajada de la interfaz ppp0.

Saludos y gracias.
__________________
J.A.M
Jam Blog
  #6 (permalink)  
Antiguo 04/02/2011, 23:42
Avatar de jam666  
Fecha de Ingreso: septiembre-2009
Ubicación: Isla De Margarita - Venezuela
Mensajes: 428
Antigüedad: 14 años, 7 meses
Puntos: 39
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Bueno me respondo yo mismo :D

Encontre en el recetario de la comunidad de PyAr este recetario que me me va como anillo al dedo para realizar lo que queria sin necesidad de usar comandos extras u otra aplicacion.

Modificando un poco el codigo para adaptarlo mejor a mi aplicacion y añadiendole una funcion que comvierta de bytes a Megabytes lo deje asi:

Código Python:
Ver original
  1. def bytestomb(b):
  2.     mb = float(b) / (1024*1024)
  3.     return mb
  4.  
  5.  
  6. def bytessubidatransferidos():
  7.     interface= 'ppp0'
  8.     for line in open('/proc/net/dev', 'r'):
  9.         if interface in line:
  10.             data = line.split('%s:' % interface)[1].split()
  11.             tx_bytes =  (data[8])
  12.     return bytestomb(tx_bytes)
  13.  
  14.  
  15. def bytesbajadatransferidos():
  16.     interface= 'ppp0'
  17.     for line in open('/proc/net/dev', 'r'):
  18.         if interface in line:
  19.             data = line.split('%s:' % interface)[1].split()
  20.             rx_bytes = (data[0])
  21.     return bytestomb(rx_bytes)
  22.  
  23.  
  24. print bytessubidatransferidos()
  25. print bytesbajadatransferidos()


Como comento mas arriba, esta solucion me a a servido muy bien para la aplicacion que estoy realizando por lo que la coloco en caso de que le sirva a alguien mas.

Saludos.
__________________
J.A.M
Jam Blog
  #7 (permalink)  
Antiguo 05/02/2011, 13:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Solo como aclaración estos códigos tienen dependencias con el sistema operativo que estemos utilizando. Lo que significa que no es portable.
  #8 (permalink)  
Antiguo 05/02/2011, 16:02
Avatar de jam666  
Fecha de Ingreso: septiembre-2009
Ubicación: Isla De Margarita - Venezuela
Mensajes: 428
Antigüedad: 14 años, 7 meses
Puntos: 39
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Cita:
Iniciado por razpeitia Ver Mensaje
Solo como aclaración estos códigos tienen dependencias con el sistema operativo que estemos utilizando. Lo que significa que no es portable.
Tienes razon y creo que eso es mas que obio ya que es evidente que, por ejemplo un S.O Windows no tiene una interfaz de red que se llame "PPP0" o "eth0" o "wlan0"....

Ademas, tanto esta seccion del codigo como el resto del codigo de la aplicacion estan pensados exclusivamente para ser usados en S.O Linux... si hubiese querido llevar el registro de datos transferidos en Windows o MacOS, hubiese usado la aplicacion que trae el modem inalambrico con el que me conecto a internet y no me hubise matado aprendiendo Python, MongoDB y MongoEngine.

Saludos
__________________
J.A.M
Jam Blog
  #9 (permalink)  
Antiguo 16/02/2011, 17:42
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Modulo o Funcion para obtener informacion de una interfaz de red en Python

Cita:
Iniciado por jam666 Ver Mensaje
Tienes razon y creo que eso es mas que obio ya que es evidente que, por ejemplo un S.O Windows no tiene una interfaz de red que se llame "PPP0" o "eth0" o "wlan0"....

Ademas, tanto esta seccion del codigo como el resto del codigo de la aplicacion estan pensados exclusivamente para ser usados en S.O Linux... si hubiese querido llevar el registro de datos transferidos en Windows o MacOS, hubiese usado la aplicacion que trae el modem inalambrico con el que me conecto a internet y no me hubise matado aprendiendo Python, MongoDB y MongoEngine.

Saludos
Pero mola lo que te has currado y mientras otros tambien hemos aprendido.Gracias

Etiquetas: funcion, informacion, interfaz, modulo, red
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:19.