Linux makinemde meşgul ve boş port numaralarını bulmak ve listelemek için herhangi bir komut satırı komutu veya başka bir yol var mı?
Linux makinemde meşgul ve boş port numaralarını bulmak ve listelemek için herhangi bir komut satırı komutu veya başka bir yol var mı?
Yanıtlar:
Komuta
netstat -antu
Kullanılan tüm tcp ve udp bağlantı noktalarını gösterir. Çıktı şöyle görünecek:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN
Yerel Adres alanındaki iki nokta üstündeki sayı, kullanılan bağlantı noktasını gösterir. Eğer durum "LISTEN" ise, gelen bağlantılar için kullanılan bir port anlamına gelir. IP adresi varsa Local Address
alanına edilir 0.0.0.0
, gelen bağlantıların bir arabirime atanmış herhangi bir IP adresine kabul edilecektir anlamına gelir - makinenizin bağlantıları kaynak dışarıdan bu yollarla bu yüzden.
Söyleseydi localhost
ya 127.0.0.1
da sadece makinenizden gelen bağlantıları kabul ederdi.
Ayrıca, -p
parametreyi ekler ve root olarak çalıştırırsanız, portu açan işlemi gösterecektir:
$ sudo netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:59753 0.0.0.0:* LISTEN 860/rpc.statd
Kullanımda olduğu gösterilmeyen her şey ücretsizdir, ancak kullanıcılar (ayrıcalıklı hesaplar) yalnızca 1023'ün üstündeki bağlantı noktalarını açabilir.
-antu
olarak -tuna
yazılabilir
Açılan bağlantı noktalarını denetlemenin iyi ve güvenilir bir yolu ss
( kullanımdan kaldırılanların yerine koyma netstat
) kullanmaktır, yükseltilmiş ayrıcalıklar gerektirmeden bir komut dosyasında kullanılabilir (örn. sudo
).
Kullanım: -l
dinleme portları için seçenek -n
, DNS çözünürlüğünü atlamak için seçenek ve kaynak portundaki filtre NN
: src :NN
( NN
izlemek istediğiniz port ile değiştirin ). Daha fazla seçenek için, bkz.man ss
ss -ln src :NN
Örnekler:
[user@server ~]# ss -ln src :80
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
[user@server ~]# ss -ln src :81
State Recv-Q Send-Q Local Address:Port Peer Address:Port
Bir komut dosyasında grep kullanarak çıktının istediğimiz bağlantı noktasını içerip içermediğini test edebiliriz. Port 80 kullanımda iken örneği (yukarıya bakın):
myport=80
# count the number of occurrences of port $myport in output: 1= in use; 0 = not in use
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 80 is in use (result == 1)
Port 81 ile örnek kullanımda değil (yukarıya bakın)
myport=81
result=$(ss -ln src :$myport | grep -Ec -e "\<$myport\>")
if [ "$result" -eq 1 ]; then
echo "Port $myport is in use (result == $result) "
else
echo "Port $myport is NOT in use (result == $result) "
fi
# output:
Port 81 is NOT in use (result == 0)
Diğer yol:
telnet localhost <PORT_NUMBER>
Bağlantı noktası boşsa bir hata alırsınız. Port kullanımda ise telnet bağlanacaktır.