Port apa yang digunakan oleh aplikasi [duplikat]

11

Pertanyaan ini sudah ada jawabannya di sini:

Saya menguji aplikasi yang membuka port-nya sendiri (bertindak sebagai server untuk port-port ini, karenanya mendengarkan pada port-port itu) dan ketika aplikasi yang sama terhubung ke port-port yang terikat oleh aplikasi lain (bertindak sebagai klien untuk port-port ini).

Saya ingin mendapatkan gambaran tentang port mana yang dibuat oleh aplikasi dan ke mana aplikasi dan port yang terhubung.

Bagaimana saya bisa melakukan ini?

Baz
sumber

Jawaban:

17

Anda bisa menggunakannya netstatuntuk ini. Lihat contohnya (saya mengerti ssh):

netstat -putan | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1725/sshd
tcp        0      0 1.2.3.4:45734           1.2.3.5:22              ESTABLISHED 2491/ssh
tcp6       0      0 :::22                   :::*                    LISTEN      1725/sshd

Penjelasan:

Saya sering menggunakan parameter -putan(karena mudah diingat).

  • -p: tunjukkan PID aplikasi / proses
  • -u: tampilkan port / koneksi udp
  • -t: tunjukkan port / koneksi tcp
  • -a: menunjukkan soket yang mendengarkan dan yang tidak mendengarkan
  • -n: output numerik (jangan lakukan pencarian DNS untuk nama host, dll.)

Pada output di atas, Anda melihat bahwa ada proses daemon ssh ( sshd) dengan PID 1725mendengarkan di port 22pada semua antarmuka jaringan ( 0.0.0.0). Juga ada proses klien ssh (PID 2491) yang terhubung ke alamat IP 1.2.3.5di nomor port 22, alamat IP 1.2.3.4saya dan port eksternal saya 45734. Anda melihat bahwa koneksi dibuat. Karenanya saya masuk melalui ssh.

kekacauan
sumber
Koneksi TCP yang ada pada port 22 tidak menunjukkan keberhasilan otentikasi. TCP harus dibuat sebelum otentikasi di kedua arah dapat terjadi.
jamesbtate
@ Puddingfox ya benar, kita bisa lebih baik mengatakan "Saya terhubung ke port itu", tetapi untuk pemahaman saya berkata "Saya masuk", karena lebih ilustratif.
kekacauan
1
hehe ... `-putan ' Saya sangat tergoda untuk memperbaiki kesalahan pengejaan kecil ini;)
James Mertz
Mengapa menggunakan utilitas usang ketika yang modern tersedia? ss -lntp adalah utilitas yang disediakan oleh iproute2 suite.
MariusMatutiae
7

Alat lain yang dapat melakukan ini adalah lsof:

# lsof -i -a -p 1981
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP host.example.com:ssh (LISTEN)
# lsof -i -a -p 1981 -n
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:ssh (LISTEN)
# lsof -i -a -p 1981 -n -P
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1981 root    3u  IPv4    917      0t0  TCP 10.1.2.3:22 (LISTEN)
#

Opsi yang digunakan adalah sebagai berikut:

  • -i untuk mencetak port internet yang terbuka melalui suatu proses
  • -a menyebabkan semua opsi menjadi AND-ed
  • -p 1981 untuk menunjukkan keluaran untuk proses 1981
  • -n untuk menghambat pencarian hostname dan menunjukkan IP sebagai gantinya
  • -P untuk menghambat pencarian layanan dan menampilkan nomor port saja

lsofmemiliki keuntungan bahwa Anda dapat menentukan proses untuk memeriksa daripada harus mengeluarkannya dari output yang lebih besar. netstatlebih andal tersedia pada sistem, meskipun lsofmenjadi lebih standar dari dulu.

gowenfawr
sumber
Saya ingin menjalankan perintah ini sebelum meluncurkan aplikasi yang ingin saya pantau tetapi bisakah saya menetapkan pid apa yang akan didapat aplikasi sebelum memulai?
Baz
@Baz, jika Anda ingin memonitor aplikasi saat dijalankan (mis., Sebelum Anda tahu itu PID), Anda harus mencoba stracesolusi yang disarankan @olivecoder.
gowenfawr
3

ssutilitas dari paket iproute untuk Linux

Serge Chirik
sumber
3

Kami sudah memiliki jawaban yang baik tetapi mereka hanya mencantumkan port yang terbuka saat perintah dijalankan.

strace adalah alat yang tepat untuk memantau koneksi yang dibuka selama masa aplikasi:

strace -e socket,connect,close -f -o hipchat.strace.txt hipchat

Output akan menampilkan informasi tambahan seperti permintaan UDP dan koneksi yang terbuka tetapi tertutup.

olivecoder
sumber
0

ss -a4 | less

Saya berasumsi Anda berbicara tentang IPv4 ... Jika tidak, Anda dapat mengganti 4 pada perintah sebelumnya dengan 6. Parameter -a adalah menampilkan semua port (mendengarkan dan non). Anda dapat menambahkan -n ke parameter jika Anda tidak ingin menyelesaikan nama di layar.

rotten777
sumber