- Konu sahibi
- #1
Bir sürecin hangi portu dinlediği nasıl bulunur?
Bu rehber Linux’ta bir PID’yi TCP dinleyicisi veya UDP uç noktasıyla eşleştirme akışını anlatır. Bir sürecin dinlediği portu bulmak için önce
ss komutunu, gerekirse lsof komutunu kullanın. Örneğin TCP dinleme soketlerini süreç adı, PID ve port bilgisiyle görmek için kabukta şu komutu çalıştırın:
Kod:
sudo ss -ltnp
Çıktıda
LISTEN satırındaki Local Address:Port bölümü portu, users:(...) bölümü ise süreci ve PID değerini gösterir. Belirli bir portu kontrol etmek için çıktıyı daraltabilirsiniz:
Kod:
sudo ss -Hltnp 'sport = :8080'
Komut bir satır döndürürse 8080 portunu dinleyen bir süreç vardır. Komut başarılı olduğu halde hiç satır yoksa baktığınız ağ ad alanında bu portta TCP dinleyicisi görülmemiştir; uygulama çalışmıyor, başka bir port kullanıyor veya yalnızca UDP üzerinden dinliyor olabilir.
Çıktı nasıl okunur?
-l yalnızca dinleme soketlerini, -t TCP soketlerini, -n adları çözümlemeden sayısal adres ve portları, -p ise süreç bilgisini gösterir. Aşağıdaki satır temsili çıktıdır; gerçek makineden alınmış bir ölçüm değildir:
Kod:
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:* users:(("node",pid=4210,fd=21))
Bu satırın anlamı şudur:
node süreci 4210 PID'siyle TCP 8080 portunu dinliyor ve yalnızca yerel makinenin 127.0.0.1 adresinden bağlantı kabul ediyor. Bu nedenle başka bir bilgisayardan doğrudan erişilemeyebilir. 0.0.0.0:8080 görülmesi, sürecin makinedeki IPv4 arayüzlerinde dinlediğini; [::]:8080 görülmesi ise IPv6 tarafında dinlediğini gösterir. IPv6 soketinin IPv4 bağlantılarını da kabul edip etmediği sistem ve soket ayarına bağlıdır. Konteyner kullanıyorsanız ağ ad alanı da sonucu etkiler. Dış erişim için ayrıca işletim sistemi güvenlik duvarı, bulut güvenlik grubu, NAT veya ters vekil yapılandırması da uygun olmalıdır.Aşağıdaki komutlar, ihtiyaca göre uygun kontrolü seçmenizi sağlar:
Linux'ta hızlı seçim
| Amaç | Komut | Ne gösterir? |
|---|---|---|
| Tüm TCP dinleme portları | sudo ss -ltnp | Port, adres, süreç ve PID |
| Tüm TCP ve UDP dinleme portları | sudo ss -lntup | TCP/UDP soketleri ve süreç bilgisi |
| Belirli PID’nin TCP dinleme portları | sudo lsof -nP -a -p 4210 -iTCP -sTCP:LISTEN | Yalnız o PID’nin dinleme durumundaki TCP soketleri |
| Belirli portu kullanan süreç | sudo lsof -nP -iTCP:8080 -sTCP:LISTEN | Yerel TCP8080 dinleyicisi |
Uygulanabilir teşhis adımları
- Önce protokolü belirleyin. Web sunucuları çoğunlukla TCP kullanır; UDP kullanan servisleri kaçırmamak için
sudo ss -lntupçalıştırın. - Çıktıda ilgili portu veya servis adını bulun. Port numarası bilinmiyorsa süreç adını aramak için
sudo ss -lntup | grep -i nginxgibi bir filtre kullanabilirsiniz. - Süreç görünmüyorsa aynı kontrolü yetkili kullanıcıyla tekrarlayın.
-pseçeneği, başka kullanıcıların süreç ayrıntılarını göstermek için yetki gerektirebilir. - PID'yi doğrulamak için
ps -fp 4210çalıştırın. Komut satırı, beklediğiniz uygulamanın gerçekten çalıştığını gösteriyorsa port-süreç eşleşmesi doğrulanır. - Port beklenenden farklıysa uygulamanın yapılandırmasındaki bind adresi ve port değerini kontrol edin. Değişiklikten sonra servisi yeniden yükleyin veya yeniden başlatın; ardından
ssçıktısını tekrar okuyun. - Yerel dinleme doğrulandığı halde dışarıdan bağlantı kurulamıyorsa önce bind adresini, sonra işletim sistemi ve ağ güvenlik duvarı kurallarını inceleyin. Portu dinleyen süreç olması, portun internetten erişilebilir olduğu anlamına gelmez.
Sık yapılan hatalar
- Sadece
netstatveyassçıktısındaki portu görüp dış erişimin kesin olduğunu sanmak: Güvenlik duvarı ve bind adresi ayrıca kontrol edilmelidir. - Yalnız TCP aramak: Servis UDP kullanıyorsa
-useçeneği olmadan sonuç bulunamaz. - Süreç adını port numarasıyla karıştırmak: Portu dinleyen uygulamayı doğrulamak için PID’yi
psile eşleştirin. - İmtiyaz hatasını portun boş olduğu şeklinde yorumlamak: Yetkili komutla yeniden çalıştırmadan kesin sonuca varmayın.
Sık sorulan sorular
Konteynerin içinde görülen port neden ana makinede görünmez?
Konteyner farklı ağ ad alanında çalışıyorsa soket listeleri aynı değildir. Doğru ortamda sorgu yapıp yayımlanan ana makine portunu konteyner içindeki porttan ayırın. Ana makinede boş sonuç, konteyner içinde uygulama dinlemediğini tek başına kanıtlamaz.Portu dinleyen süreci nasıl durdurmalıyım?
Önce PID'nin doğru uygulamaya ait olduğunu doğrulayın. Yönetilen bir servis ise doğrudan PID öldürmek yerine servis yöneticisi üzerinden durdurun; aksi halde süreç yeniden başlatılabilir veya uygulama düzgün kapanmayabilir.