Bir uygulama tarafından hangi bağlantı noktaları kullanılır?


11

Kendi bağlantı noktalarını açan bir uygulamayı test ediyorum (bu bağlantı noktaları için sunucu görevi görüyor, bu nedenle bu bağlantı noktalarını dinliyor) ve aynı uygulama diğer uygulamalar tarafından bağlanan bağlantı noktalarına bağlanıyor (bu bağlantı noktaları için istemci görevi görür).

Uygulamanın hangi bağlantı noktalarını oluşturduğu ve hangi uygulamalara ve bağlantı noktalarına bağlandığı hakkında genel bir bakış almak istiyorum.

Bunu nasıl yapabilirim?

Yanıtlar:


17

Bunun için kullanabilirsiniz netstat. Örneğe bakın (uğradım 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

Açıklama:

Parametreleri sık sık kullanıyorum -putan(çünkü hatırlaması kolay).

  • -p: uygulamanın / sürecin PID'lerini göster
  • -u: udp bağlantı noktalarını / bağlantılarını göster
  • -t: tcp bağlantı noktalarını / bağlantılarını göster
  • -a: hem dinleme hem de dinleme yapmayan soketleri göster
  • -n: sayısal çıktı (ana bilgisayar adları için DNS aramaları vb. yapmayın)

Yukarıdaki çıktıda , tüm ağ arabirimlerinde ( ) bağlantı noktasında sshdPID 1725dinleyen bir ssh daemon işlemi ( ) olduğunu görüyorsunuz . Ayrıca port numarasından IP adresine bağlı bir ssh istemci işlemi (PID ) var, IP adresim ve harici portum . Bağlantının kurulduğunu görüyorsunuz. Bu yüzden üzerinden giriş yaptım .220.0.0.024911.2.3.5221.2.3.445734ssh


Bağlantı noktası 22'de kurulan TCP bağlantısı başarılı kimlik doğrulamayı göstermez. Her iki yönde kimlik doğrulamanın gerçekleşebilmesi için TCP'nin kurulması gerekir.
jamesbtate

@Puddingfox evet doğru, "Ben o bağlantı noktasına bağlıyım" diyebiliriz, ama anlamak için "Giriş yaptım" dedim, çünkü daha açıklayıcı.
kaos

1
hehe ... `-putan ' Bu küçük yazım hatasını düzeltmek için çok heyecanlıyım ;)
James Mertz

Modern araçlar mevcut olduğunda neden eski programları kullanıyorsunuz? ss -lntp iproute2 paketi tarafından sağlanan yardımcı programdır .
MariusMatutiae

7

Bunu yapabilen başka bir araç 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)
#

Kullanılan seçenekler aşağıdaki gibidir:

  • -i bir işlemle açık olan internet bağlantı noktalarını yazdırmak için
  • -a tüm seçeneklerin AND-ed olmasına neden olmak
  • -p 1981 1981 süreci için çıktı göstermek
  • -n ana bilgisayar adı aramasını engellemek ve IP'yi göstermek için
  • -P servis aramasını engellemek ve bunun yerine port numarasını göstermek için

lsofavantajı, daha büyük çıktıdan çıkarmak yerine, kontrol edilecek işlemi belirtebileceğiniz avantajdır. netstatsistemlerde daha güvenilir bir şekilde kullanılabilir, ancak lsofeskisinden daha standart hale geliyor.


İzlemek istediğim uygulamayı başlatmadan önce bu komutu çalıştırmak istiyorum, ancak bir uygulamanın başlatmadan önce hangi pid'i alacağını belirleyebilir miyim?
Baz

@Baz, bir uygulamayı başlarken izlemek istiyorsanız (örneğin, PID olduğunu bilmeden önce), strace@olivecoder tarafından önerilen çözümü denemelisiniz .
gowenfawr


3

Zaten iyi yanıtlarımız var, ancak yalnızca komut çalıştığı anda açık olan bağlantı noktalarını listelerler.

strace uygulama ömrü boyunca açılan bağlantıları izlemek için doğru araçtır:

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

Çıktı size UDP istekleri ve açık ancak kapalı bağlantılar gibi ek bilgileri gösterir.


0

ss -a4 | less

IPv4 hakkında konuştuğunuzu varsayıyorum ... Değilse, önceki komuttaki 4'ü 6 ile değiştirebilirsiniz. -A parametresi tüm bağlantı noktalarını (dinleme olan ve olmayan) göstermektir. Ekrandaki adları çözümlemek istemiyorsanız parametrelere -n ekleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.