Bagaimana cara saya memeriksa berapa banyak koneksi yang terbuka saat ini pada port TCP tertentu?

8

Saya sedang melakukan beberapa tolok ukur komet dan ingin melihat berapa banyak koneksi terbuka yang saya miliki.

Sebenarnya saya menggunakan netstat:

netstat -ant | grep 8080 | grep EST | wc -l

Tetapi perlu sekitar 4-6 menit untuk mendaftar nomor, apakah ada alat yang dapat menunjukkannya secara langsung? Jumlah koneksi terbuka adalah antara 100'000 - 250'000.

Nenad
sumber
Berdasarkan apa yang ingin Anda capai, sudahkah Anda mempertimbangkan untuk menggunakan NetFlow dan alat analisis?
SpacemanSpiff
@SpacemanSpiff Saya harap ada beberapa solusi mudah, tetapi saya akan melihat NetFlow karena saya tidak yakin apakah bekerja dengan saklar HP.
Nenad
Anda tahu, saya bertanya-tanya apakah perfmon atau permintaan WMI dapat membawa data ini kembali dari tumpukan TCP lebih cepat ... masih ... apakah Anda setelah port terbuka atau transfer data aktif?
SpacemanSpiff
@SpacemanSpiff Saya mencari port terbuka mencari
Nenad
Mungkin permintaan SNMP? ... hanya membuang ide untuk Anda.
SpacemanSpiff

Jawaban:

8

Tidak tahu apakah lsoflebih baik, tetapi coba ini:

lsof -ni:8080 -sTCP:ESTABLISHED | wc -l
ThorstenS
sumber
sebenarnya lsof mengambil 5 detik, tapi saya punya 20'000 koneksi dan terus bertambah :-) akan memberi tahu Anda berapa lama setelah melewati 100K
Nenad
pembaruan: memiliki beberapa masalah dengan klien komet kami, tetapi lsof jauh lebih cepat 10 detik untuk koneksi 30'000, akan diperbarui setelah saya memperbaiki masalah komet dan dapat memeriksa di atas 100 ribu koneksi
Nenad
pembaruan: 15sec untuk menampilkan 130'000 koneksi - terima kasih! Ini melakukan pekerjaan untuk saya untuk solusi yang lebih rinci penganalisa jaringan harus digunakan.
Nenad
luar biasa! Anda juga bisa menggunakan sakelar -t- mungkin ini juga memberi Anda sedikit dorongan.
ThorstenS
5

Jika Anda hanya perlu melihat statistik connecton, coba ssutilitas dari iproutesuite:

# ss -s
Total: 1788 (kernel 3134)
TCP:   1638 (estab 1409, closed 162, orphaned 0, synrecv 0, timewait 127/0), ports 0

Transport Total     IP        IPv6
*         3134      -         -        
RAW       0         0         0        
UDP       74        69        5        
TCP       1476      1444      32       
INET      1550      1513      37       
FRAG      0         0         0     

Anda juga dapat melihat informasi terperinci tentang semua koneksi yang ada seperti ini:

ss -n state established

… Atau hanya koneksi ssh:

ss -n state established '( dport = :ssh or sport = :ssh )'

Beberapa bagian nomor di bagian bawah halaman ini mungkin juga menarik bagi Anda.

artyom
sumber
+1 karena tidak menggunakan netstat yang sudah usang
Joshua Griffiths
Saya tahu ini dari 6 tahun yang lalu, tetapi apakah Anda atau orang lain memiliki tautan ke sesuatu yang memecah keluaran status ss. Saya secara khusus ingin tahu tentang jumlah port pada akhir garis TCP. Saya melakukan beberapa pengujian perbandingan antara dua server yang bertindak sebagai penyeimbang beban dan pada satu hitungan port berkisar sekitar 1000 dan pada yang lain selalu 0. Apa yang khusus menghitung itu?
RobertRSeattle
1
@RobertRSeattle oleh ss source code tampaknya nomor ini dibaca dari tcp_bind_bucketbaris /proc/slabinfofile. Anda mungkin ingin membandingkan output awk 'NR==2||/tcp_bind_bucket/' /proc/slabinfoantara dua server Anda. Rincian lebih lanjut mungkin dapat ditemukan di suatu tempat di sumber kernel.
artyom
1

Pilihan lain adalah membaca /proc/net/tcpsecara langsung. Untuk melihat semua koneksi TCP yang ada aktif, 8080, Anda akan melakukan sesuatu seperti

$ printf %04X 8080
1F90
$ grep :1F90 /proc/net/tcp | grep ' 01 ' | wc -l

Jika Anda ingin melakukannya dalam satu proses (kurang IO overhead) dan menangani kasus sudut, berikut ini memberitahu Anda berapa banyak koneksi TCP ESTABLISHED memiliki port lokal 8080:

$ perl -anle '
          $F[1] =~ /:1F90/ and $F[3] =~ /01/ and $cnt++;
          END { print 0+$cnt }
         '  /proc/net/tcp

Jika perangkat lunak pada mesin Anda yang mendengarkan 8080 memiliki dukungan IPv6, Anda harus membaca /proc/net/tcp6juga; jika program menggunakan soket IPv6, koneksi akan muncul di sana bahkan jika mereka menggunakan IPv4.

jon
sumber
0

lebih mudah adalah

#netstat -at | wc -l

Ini akan menampilkan jumlah koneksi TCP pada sistem ...

pengguna162048
sumber
Ini akan memakan waktu lebih lama karena Anda tidak menggunakan bendera "n" untuk menghentikannya dari mencari semua nama host. Ini juga akan menunjukkan hal lain selain koneksi port 8080 yang menjadi pertanyaan.
Jenny D