Linux'ta Açık Limanlar listesini alın


191

Bir uygulamada kullanılacak tüm açık portları listelemek için bir Linux komutuna ihtiyacım var

lsof -i TCP| fgrep LISTEN

Listelenen Limanlar'ın kullanımı kesinlikle ücretsiz olmadığından yardımcı olduğu görülmedi. Kullanılmayan boş açık portları nasıl listeleyebilirim?

Yanıtlar:


258
netstat -lntu

@askmish tarafından yanıtlandığı gibi, sisteminizde çalışan servislerin listesini tcp ve udp portlarında verecektir.

  • -l = sadece bir limanda dinleyen servisler
  • -n = port numarasını göster, servis ismini çözmeye çalışmayın
  • -t = tcp portları
  • -u = udp bağlantı noktaları
  • -p = programın adı

'P' parametresine ihtiyacınız yoktur, çünkü sadece hangi portların serbest olduğunu ve hangi programın çalıştığını öğrenmek istemezsiniz.

Ancak bu, yalnızca sisteminizde hangi bağlantı noktalarının kullanıldığını gösterir. Bu size ağınızın durumunu söylemez, örneğin NAT'ın arkasındaysanız ve bazı servislerin dışarıdan erişilebilir olmasını istiyorsanız. Veya güvenlik duvarı, dış ziyaretçiler için bağlantı noktasını engelliyorsa. Bu durumda nmap kurtarmaya gelir. UYARI: Nmap'ı yalnızca kontrolünüz altında olan ağlarda kullanın. Ayrıca, nmap sayfalarını engelleyebilecek güvenlik duvarı kuralları vardır, doğru sonuçları elde etmek için seçeneklerle uğraşmanız gerekir.


19
netstatBirçok sistemde kullanım dışı olduğunu ve ssbunun yerine kullanılması gerektiğini unutmayın.
Johu

1
ama ss
meşgul iseniz

90

Yana net-toolskullanımdan kaldırılmıştır , kullanabileceğiniz sskomutu yerine netstateğer netstatmakinenizde mevcut değildir:

ss -lntu

benzer şekilde çalışmalı

netstat -lntu

Yerleşik yardıma göre:

-n, --numeric       don't resolve service names
-l, --listening     display listening sockets
-t, --tcp           display only TCP sockets
-u, --udp           display only UDP sockets

3
Bir başka faydalı bayrak soketin işlem kimliğini gösteren -p'dir.
Talespin_Kit

21

Bu komut açık ağ bağlantı noktalarını ve bunlara sahip olan işlemleri listeler:

netstat -lnptu

Bundan sonra sonuçları kesin özelliklerine göre filtreleyebilirsiniz.

nmapBağlantı noktaları hakkında daha ayrıntılı sonuçlar için de kullanabilirsiniz .


2
-P bayrağı bazı işlemler için kök ayrıcalıkları gerektirir, bu yüzden olacaktırsudo netstat -lnptu
klaus se

5

Yanıt trafiği dahil tüm açılan bağlantı noktaları:

netstat -tuwanp 2>/dev/null | awk '{print $4}' | sort | uniq -c | wc -l

3
Sadece benzersiz liman numaralarının ve sadece IPv4'ün bir listesi :netstat -tuwanp4 | awk '{print $4}' | grep ':' | cut -d ":" -f 2 | sort | uniq
Aaron C. de Bruyn

Sonuçtan sayıların nasıl süzüleceğini ve çıkarılacağını göstermek için +1. Stderr çıktısını netstat'tan kaldırmak için düzenlenmiştir (bu, Ubuntu'daki sonuca bir başlık ekler).
datashaman

Hmm, ikinci düşüncelerde. -1 soruya cevap vermediğim için.
datashaman

1

Asıl soruya benim almam, şu anda hizmetlere bağlı olan portları değil, kullanılmayan portları sormasıydı. Bu durumda, kullanılan bağlantı noktalarını listelemek ve diğerlerinin kullanılmadığını varsaymak dışında, bunları listelemek için belirli bir yol yoktur.

Akılda tutulması gereken bir ek nokta: bir kullanıcı olarak, 1024'ten daha az bir bağlantı noktası açamazsınız (bunun için kök izinlerine ihtiyacınız vardır).


0

Aşağıdaki komut, Ubuntu / Debian ile aynı biçimde çıkan herhangi bir Unix üzerinde çalışacaktır - burada yerel adres 4. sütundadır ve çıktı en üstünde 2 satır başlığı içerir. Bu numaralardan herhangi biri farklıysa, aşağıdaki awk komutunu değiştirin.

Yalnızca IPv4'ü istiyorsanız:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '0.0.0.0:' | sed 's/.*://' | sort -n | uniq

Yalnızca IPv6'yı istiyorsanız:

netstat -lnt | awk 'NR>2{print $4}' | grep -E ':::' | sed 's/.*://' | sort -n | uniq

İkisini birlikte istiyorsanız:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(0.0.0.0:|:::)' | sed 's/.*://' | sort -n | uniq

Komut, tüm arayüzleri dinleyen port numaralarının bir listesini verir. Localhost arayüzünde dinleyen tüm portları listelemek istiyorsanız, bunun gibi bir şey kullanın:

netstat -lnt | awk 'NR>2{print $4}' | grep -E '(127.0.0.1:|::1:)' | sed 's/.*://' | sort -n | uniq

0

Deneyin

sudo netstat -plnt | grep -E '(0.0.0.0:|:::|127.0.0.1:|::1:)' |  awk 'NR>2{print $7}' | sort -n  | uniq

ve şuna bak.

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.