¿Cómo puedo saber qué aplicación está usando la red?

9

Muy ocasionalmente cuando uso mi Mac, noto que mi conexión a Internet se ralentiza. Al usar el Monitor de actividad, puedo ver que es porque algo está descargando datos a la velocidad máxima que mi conexión puede soportar, pero no sé cómo saber qué es responsable de ello. Puede deberse a varias cosas diferentes (sincronización de Dropbox; alguna aplicación que realiza una actualización automática; más recientemente fue un almacenamiento en búfer de video en una pestaña del navegador que había olvidado), por lo que sería realmente útil tener una manera de contar qué aplicación es responsable del uso de la red. ¿Es posible tal cosa en OS X? Idealmente, estoy buscando una solución gratuita. (La línea de comando está bien.) Estoy en Snow Leopard si hace la diferencia.

Nathaniel
fuente

Respuestas:

6

Puedes probar este dtraceone-liner:

sudo dtrace -n 'syscall::recvfrom:return { @[pid,execname] = sum(arg0); }'

Déjalo correr por un tiempo, luego presiona Control-C. Imprimirá un resumen de la cantidad de bytes leídos de los sockets, distribuidos entre los procesos. Para una vista más detallada, reemplace sumpor quantize. O simplemente para ver un recuento de lecturas de socket, reemplace sumpor count.

Descargo de responsabilidad: solo he intentado esto en Lion, pero AFAIK no se han producido grandes cambios en la capacidad de rastreo entre SL y Lion.

Harald Hanche-Olsen
fuente
1
¡Muchas gracias! Simple y efectivo y hace exactamente lo que necesitaba. Funciona bien en Snow Leopard.
Nathaniel
... aunque en realidad, usando "suma" los números parecen un poco extraños: Google Chrome generalmente obtiene un número negativo (!). Pero usando cuantizar parecen razonables.
Nathaniel
Números negativos, ¿eh? Quizás sea un caso de desbordamiento. O si obtiene números negativos pequeños, recuerde que las llamadas al sistema devuelven -1 si se produjo un error. Si se desborda, supongo que no sucedería cuando ejecutas un kernel de 64 bits.
Harald Hanche-Olsen
Son números negativos de tamaño mediano. Aquí hay un resultado típico (tomado al volver a cargar esta página en Chrome): 250 Google Chrome -159; 39 KernelEventAgen 1; 19 mDNSResponder 2240; pero podría estar malinterpretándolos: cuando uso 'quanitze' hay una columna de "valor" que puede tener valores negativos y una columna de "conteo". Parece que el comando sum informa la suma de (valor) * (cuenta). ¿Quizás los valores negativos significan paquetes entrantes, o algo así?
Nathaniel
No, esto se trata de datos entrantes ... Supongo que Chrome hace sondeos frecuentes llamando a recvfrom con un breve tiempo de espera establecido en el socket, en cuyo caso el valor de retorno -1 resulta si no hay datos. Consulte la página del manual para obtener más información.
Harald Hanche-Olsen
6

Cortafuegos

Puedes usar Little Snitch o HandsOff . Son excelentes firewalls y ambos tienen una función de "Monitor de red", que hará el trabajo:

Little Snitch incluye un Monitor de red, que muestra información detallada de todo el tráfico de red entrante y saliente.
Un icono de estado en la barra de menú proporciona un resumen de la actividad actual de la red, y una ventana de monitor con información más completa aparece automáticamente en caso de nuevos eventos de tráfico.

Hands Off es una aplicación para monitorear y controlar el acceso de aplicaciones a su red y discos. Ser capaz de monitorear las actividades normalmente imperceptibles le permite tomar decisiones informadas con respecto a la transferencia de su información privada, evitando así la filtración de información confidencial.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Los monitores de red de: Little Snitch (izquierda), HandsOff (derecha)

Nettop

Una solución cli gratuita e integrada (desafortunadamente no está incluida en Snow Leopard) sería nettop . nettop agrupa el tráfico por programa y puerto y mide varias estadísticas de red.

Otro

Hay algunos otros programas que capturan y miden el tráfico ( iftop , wireshark , tcpdump ), pero no conocen el pid originado. Para hacer la conexión, debe usar netstat .

mspasov
fuente
¡Gracias! He editado la pregunta para indicar que idealmente estoy buscando una solución gratuita (30 € es demasiado para algo que usaría solo ocasionalmente), pero si no hay una forma gratuita de hacerlo, entonces ' Aceptaré esta respuesta.
Nathaniel
Disculpa, me equivoque. Intentaré encontrar una alternativa gratuita y actualizaré mi respuesta.
mspasov
¡Decir ah! nettopFue nuevo para mí. Se ve a mano.
Harald Hanche-Olsen
También aceptaría esta respuesta si fuera posible. Si actualizo a Lion, parece que nettop será realmente útil.
Nathaniel
4
sudo fs_usage -f network

le dará todos los accesos a la red de todas las aplicaciones (y procesos). Por lo general, el proceso que crea mucho tráfico es el que aparece con mayor frecuencia en la salida.

nohillside
fuente
1
Gracias, esto es realmente útil. Estoy impresionado por la cantidad de respuestas útiles a esta pregunta.
Nathaniel
1

El "libro DTrace" tiene un script, soconnect.d , que hace esto.

Copie la versión "Mac OS X", péguela en un archivo de texto, luego ejecútela desde el terminal con sudo dtrace -s soconnect.d.

Conocer
fuente
Pero eso no le da una idea de la cantidad de tráfico de red que recibe un proceso, ¿verdad? Solo rastrea conexiones, por lo que puedo decir.
Harald Hanche-Olsen
1

El Monitor de actividad también ha tenido columnas para los bytes recibidos y enviados desde 10.9:

Lri
fuente