Bagaimana saya bisa tahu aplikasi mana yang menggunakan jaringan?

9

Sangat jarang ketika menggunakan Mac saya, saya melihat koneksi internet saya melambat. Menggunakan Monitor Aktivitas Saya dapat melihat bahwa itu karena sesuatu sedang mengunduh data dengan kecepatan penuh yang dapat didukung koneksi saya --- tetapi saya tidak tahu bagaimana cara mengatakan apa yang bertanggung jawab untuk itu. Hal ini dapat disebabkan oleh beberapa hal berbeda (Sinkronisasi Dropbox; beberapa aplikasi melakukan pembaruan otomatis; yang terbaru adalah buffer video di tab browser yang saya lupa) sehingga akan sangat berguna untuk memiliki cara untuk memberi tahu aplikasi mana yang bertanggung jawab atas penggunaan jaringan. Apakah hal seperti itu mungkin di OS X? Idealnya saya mencari solusi gratis. (Baris perintah OK.) Saya menggunakan Snow Leopard jika ada bedanya.

Nathaniel
sumber

Jawaban:

6

Anda dapat mencoba dtraceone-liner ini:

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

Biarkan berjalan selama beberapa saat, lalu tekan Control-C. Ini akan mencetak ringkasan jumlah byte yang dibaca dari soket, didistribusikan di antara proses. Untuk tampilan yang lebih detail, ganti sumdengan quantize. Atau hanya untuk melihat hitungan socket berbunyi, ganti sumdengan count.

Penafian: Saya hanya mencoba ini pada Lion, tetapi AFAIK tidak ada perubahan besar dalam kemampuan dtrace yang terjadi antara SL dan Lion.

Harald Hanche-Olsen
sumber
1
Terimakasih banyak! Sederhana dan efektif dan melakukan apa yang saya butuhkan. Bekerja dengan baik di Snow Leopard.
Nathaniel
... walaupun sebenarnya, menggunakan "jumlah" angka-angka tersebut terlihat agak aneh - Google Chrome biasanya mendapat angka negatif (!). Tetapi menggunakan kuantisasi mereka terlihat masuk akal.
Nathaniel
Angka negatif, ya? Mungkin itu adalah kasus meluap. Atau jika Anda mendapatkan angka negatif kecil, ingat bahwa panggilan sistem mengembalikan -1 jika terjadi kesalahan. Jika overflow, saya duga itu tidak akan terjadi ketika Anda menjalankan kernel 64 bit.
Harald Hanche-Olsen
Mereka adalah angka negatif berukuran sedang. Berikut ini adalah keluaran khas (diambil saat memuat ulang halaman ini di Chrome): 250 Google Chrome -159; 39 KernelEventAgen 1; 19 mDNSResponder 2240; tapi saya mungkin saja salah mengartikannya - ketika saya menggunakan 'quanitze' ada kolom "nilai" yang dapat memiliki nilai negatif, dan kolom "hitung". Sepertinya perintah sum melaporkan jumlah (nilai) * (hitung). Mungkin nilai negatif berarti paket masuk, atau sesuatu?
Nathaniel
Tidak, ini semua tentang data yang masuk ... Saya kira chrome memang sering melakukan polling dengan memanggil recvfrom dengan timeout pendek yang diatur dalam soket, dalam hal ini nilai pengembalian -1 dihasilkan jika tidak ada data. Lihat halaman manual untuk recvfrom.
Harald Hanche-Olsen
6

Firewall

Anda bisa menggunakan Little Snitch atau HandsOff . Mereka adalah firewall yang hebat dan keduanya memiliki fitur "Network Monitor", yang akan melakukan pekerjaan:

Little Snitch mencakup Monitor Jaringan, menampilkan informasi terperinci dari semua lalu lintas jaringan yang masuk dan keluar.
Ikon status di bilah menu menyediakan ringkasan aktivitas jaringan saat ini, dan jendela monitor dengan informasi yang lebih komprehensif muncul secara otomatis jika terjadi peristiwa lalu lintas baru.

Hands Off adalah aplikasi untuk memantau dan mengontrol akses aplikasi ke jaringan dan disk Anda. Mampu memantau kegiatan yang biasanya tidak terlalu mencolok memungkinkan Anda membuat keputusan berdasarkan informasi mengenai transfer informasi pribadi Anda, sehingga menghindari kebocoran informasi rahasia.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Monitor jaringan: Little Snitch (kiri), HandsOff (kanan)

Nettop

Solusi cli gratis dan built-in (sayangnya itu tidak termasuk dalam Snow Leopard) adalah nettop . nettop mengelompokkan lalu lintas berdasarkan program dan pelabuhan serta mengukur berbagai statistik jaringan.

Lain

Ada beberapa program lain, yang menangkap dan mengukur lalu lintas ( iftop , wireshark , tcpdump ), tetapi mereka tidak tahu pid asli. Untuk membuat koneksi, Anda harus menggunakan netstat .

mspasov
sumber
Terima kasih! Saya telah mengedit pertanyaan untuk menunjukkan bahwa saya idealnya mencari solusi gratis (€ 30 terlalu banyak untuk sesuatu yang saya gunakan hanya sekali-sekali), tetapi jika tidak ada cara gratis untuk melakukannya maka saya akan Saya akan menerima jawaban ini.
Nathaniel
Maaf, salah saya. Saya akan mencoba mencari alternatif gratis dan akan memperbarui jawaban saya.
mspasov
Ha! nettopbaru bagi saya. Tampak berguna.
Harald Hanche-Olsen
Saya akan menerima jawaban ini juga jika memungkinkan. Jika saya meng-upgrade ke Lion, sepertinya nettop akan sangat berguna.
Nathaniel
4
sudo fs_usage -f network

akan memberi Anda semua akses jaringan oleh semua aplikasi (dan proses). Biasanya proses menciptakan banyak lalu lintas adalah yang paling sering muncul di output.

nohillside
sumber
1
Terima kasih, ini sangat berguna. Saya terkesan dengan sejumlah jawaban bermanfaat untuk pertanyaan ini.
Nathaniel
1

"Buku DTrace" memiliki skrip, soconnect.d , yang melakukan ini.

Salin versi "Mac OS X", tempel di file teks, lalu jalankan dari terminal dengan sudo dtrace -s soconnect.d.

Ken
sumber
Tapi itu tidak memberi Anda gagasan tentang jumlah lalu lintas jaringan yang diterima proses, bukan? Itu hanya melacak koneksi, sejauh yang saya tahu.
Harald Hanche-Olsen
1

Activity Monitor juga memiliki kolom untuk menerima dan mengirim byte sejak 10.9:

Lri
sumber