ss komutu: Linux'ta portları ve süreçleri kontrol etme, netstat ile karşılaştırma
Bir Linux sunucusunda hangi portların açık olduğunu ve kimin bağlı olduğunu ss komutuyla kontrol edersiniz. ss, netstat'ın yerini alan iproute2 soket sorgulama aracıdır. Bir Debian 12 sunucusunda ss ile dinlemedeki (LISTEN) portları ve bağlantıları sorguladığımızda, normal hesapta -p eklense bile başka hesapların başlattığı programların adının Process sütununda görünmediğini doğruladık.
Aşağıdaki çıktılar İngilizce locale ile çalıştırılarak alınmıştır. Sunucunun ve karşı tarafın adresleri örnek adreslerle gösterilmiştir.
1️⃣ ss komutunun temel kullanımı ve çıktı sütunları
ss'i seçeneksiz çalıştırırsanız dinlemedeki portlar dışarıda kalır ve yalnızca bağlantısı kurulmuş soketler görünür. Test sunucusunda ilk satırların hepsi, sunucu içindeki programların birbiriyle konuşmak için kullandığı Unix soketleriydi (u_str, u_dgr).
ss | head -n 5Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
u_str ESTAB 0 0 * 1013903 * 1013904
u_dgr ESTAB 0 0 * 1013960 * 13394
u_str ESTAB 0 0 * 1013907 * 1013908
u_str ESTAB 0 0 * 46066198 * 46066199Bu yüzden yalnızca TCP bağlantılarını görmek için -t eklersiniz. Unix soketleri çıkar ve port yerinde numara yerine ssh ve https gibi servis adları görünür.
ss -tState Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 203.0.113.10:ssh 198.51.100.7:51114
ESTAB 0 0 203.0.113.10:26676 192.0.2.15:https
ESTAB 0 0 203.0.113.10:29714 192.0.2.16:https-n'i de eklerseniz port numaraları servis adlarına çevrilmeden olduğu gibi görünür.
ss -tnState Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 203.0.113.10:22 198.51.100.7:51114
ESTAB 0 0 203.0.113.10:26676 192.0.2.15:443
ESTAB 0 0 203.0.113.10:29714 192.0.2.16:443Recv-Q ve Send-Q sütunları, soketin durumuna göre farklı anlamlar taşır. Bağlı bir sokette Recv-Q alınmış ama programın henüz okumadığı bayt sayısı, Send-Q ise gönderilmiş ama karşı tarafın henüz alındığını onaylamadığı bayt sayısıdır.
Dinlemedeki bir sokette Recv-Q kuyrukta bekleyen bağlantı sayısını, Send-Q ise kuyruğun en büyük boyutunu gösterir. Bu iki sütunun anlamı net-tools içindeki netstat(8) man sayfasının açıklamasıdır.
2️⃣ Linux'ta port kontrolü (-tln, -uln, -tulpn)
Seçeneksiz çıktıda bağlantı bekleyen portlar görünmediği için açık portları kontrol ederken yalnızca dinlemedeki soketleri seçen -l'yi eklersiniz. [ss -tln], dinlemedeki TCP portlarını numara olarak gösterir.
ss -tlnState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*Local Address 0.0.0.0 ise sunucunun tüm IPv4 adreslerine gelen bağlantıları kabul eder; 127.0.0.1 ise yalnızca sunucunun içinden bağlanılabilir. [::] tüm IPv6 adresleri anlamına gelir, bu yüzden 22, 80 ve 443 numaralı portlar hem IPv4 hem IPv6 üzerinde açıktır.
-n olmadan port numaraları servis adlarına dönüşür. 8080 numaralı port http-alt olarak görünür.
ss -tlState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
LISTEN 0 511 0.0.0.0:http 0.0.0.0:*
LISTEN 0 511 0.0.0.0:https 0.0.0.0:*
LISTEN 0 511 127.0.0.1:http-alt 0.0.0.0:*
LISTEN 0 128 [::]:ssh [::]:*
LISTEN 0 511 [::]:http [::]:*
LISTEN 0 511 [::]:https [::]:*UDP bağlantı kurmayan bir yöntem olduğundan dinlemedeki soketlerinde bile LISTEN durumu yoktur. [ss -uln] çıktısının durum sütunu baştan sona UNCONN'du. 68 numaralı port (bootpc) DHCP istemcisi, 123 numaralı port (ntp) saat eşitleme portudur.
ss -ulnState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
UNCONN 0 0 203.0.113.10:123 0.0.0.0:*
UNCONN 0 0 127.0.0.1:123 0.0.0.0:*
UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
UNCONN 0 0 [::1]:123 [::]:*
UNCONN 0 0 [::]:123 [::]:*TCP ve UDP'yi bir arada görmek için seçenekleri [ss -tulpn] gibi birleştirirsiniz. Birden fazla tür olduğunda en başa Netid sütunu eklenir.
ss -tulpnNetid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
udp UNCONN 0 0 203.0.113.10:123 0.0.0.0:*
udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
udp UNCONN 0 0 [::1]:123 [::]:*
udp UNCONN 0 0 [::]:123 [::]:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
tcp LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
tcp LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 [::]:*
tcp LISTEN 0 511 [::]:80 [::]:*
tcp LISTEN 0 511 [::]:443 [::]:*3️⃣ ss komutuyla süreç kontrolü (-p)
-p, soketi kullanan programı Process sütununda gösteren seçenektir. Ancak test sunucusundaki normal hesapta [ss -tlnp] çalıştırıldığında Process sütunu aşağıdaki gibi boş kaldı ve seçenek uygulanmamış gibi göründü.
ss -tlnpState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*ss, her süreç için /proc altındaki fd klasörünü okuyarak soketi kullanan süreci bulur. Normal hesap, başka bir hesabın başlattığı sürecin fd klasörünü açamadığı için o programın adı sütuna girmez. root'un başlattığı 1 numaralı sürecin klasörünü normal hesaptan açarsanız izin hatası alırsınız.
ls /proc/1/fdls: cannot open directory '/proc/1/fd': Permission deniedKendi hesabınızla başlattığınız programlar normal hesapta da Process sütununda görünür. Bunu python3'ün basit web sunucusunu 127.0.0.1 adresinin 8000 numaralı portunda başlatarak doğruladık.
python3 -m http.server 8000 --bind 127.0.0.1 &Başlattıktan sonra [sport = :8000] ekleyerek yalnızca 8000 numaralı portun satırını sorgularsınız.
ss -tlnp sport = :8000State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 5 127.0.0.1:8000 0.0.0.0:* users:(("python3",pid=343015,fd=3))users ifadesinden sonraki parantezde sırasıyla program adı, pid ve dosya tanımlayıcı numarası (fd) yer alır.
Kontrolü bitirdiğiniz basit web sunucusunu [kill %1] ile kapatırsınız. Kapattıktan sonra [ss -tln sport = :8000] komutunu yeniden çalıştırırsanız yalnızca başlık satırı kalır ve 8000 numaralı portun satırı görünmez.
root hesabında çalıştırıldığında tüm süreçlerin bilgileri okunabildiği için Process sütunu dolar. Bir portta birden fazla süreç birlikte dinliyorsa users parantezinde her biri için bir öğe yer alır. Aşağıdaki root çıktısındaki program adları ve pid değerleri örnek değerlerdir.
ss -tlnp sport = :443State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 511 0.0.0.0:443 0.0.0.0:* users:(("app",pid=2101,fd=6),("app",pid=2100,fd=6))
LISTEN 0 511 [::]:443 [::]:* users:(("app",pid=2101,fd=7),("app",pid=2100,fd=7))Port numarasından programı bulmak için lsof komutunun [lsof -i :443] biçimini de kullanabilirsiniz.
Process sütununun hesaba göre nasıl değiştiğini aşağıdaki diyagramda hesabı değiştirerek karşılaştırabilirsiniz.
4️⃣ ss durum ve port filtre seçenekleri
Açık portları kontrol ettikten sonra da o porta şu anda kimin bağlı olduğunu ayrıca süzmeniz gerekir. ss, seçeneklerden sonra filtre koşulu eklediğinizde yalnızca istediğiniz satırları bırakır.
state ifadesinden sonra bir durum adı yazarsanız yalnızca o durumdaki soketler kalır. [ss -tn state established] çıktısında State sütunu yoktur ve çıktı Recv-Q sütunuyla başlar.
ss -tn state establishedRecv-Q Send-Q Local Address:Port Peer Address:Port Process
0 0 203.0.113.10:22 198.51.100.7:51114
0 0 203.0.113.10:26676 192.0.2.15:443
0 0 203.0.113.10:29714 192.0.2.16:443Portları dport (karşı tarafın portu) ve sport (kendi tarafınızın portu) ile süzersiniz. Sunucudan dışarıdaki https sunucularına giden bağlantıları [dport = :443] ile seçersiniz.
ss -tn dport = :443State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
ESTAB 0 0 203.0.113.10:26676 192.0.2.15:443
ESTAB 0 0 203.0.113.10:29714 192.0.2.16:443sport'u -l ile birlikte kullanırsanız yalnızca o portun dinlemede olup olmadığını kontrol edebilirsiniz.
ss -tln sport = :22State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*Birden fazla koşulu parantez ve or ile gruplar, kabuğun parantezleri önce yorumlamaması için tek tırnak içine alırsınız. Aşağıda man sayfasındaki örneğe göre yalnızca ssh bağlantılarının seçildiği sonuç var.
ss -tn state established '( dport = :ssh or sport = :ssh )'Recv-Q Send-Q Local Address:Port Peer Address:Port Process
0 0 203.0.113.10:22 198.51.100.7:51114TIME-WAIT, bağlantı kesildikten sonra kısa bir süre kalan durumdur. Varsayılan çıktıda görünmediği için görmek istiyorsanız [state time-wait] ile ayrıca seçmeniz gerekir.
ss -tn state time-waitRecv-Q Send-Q Local Address:Port Peer Address:PortProcess
0 0 127.0.0.1:28750 127.0.0.1:80
0 0 127.0.0.1:57698 127.0.0.1:8080
0 0 [::1]:31936 [::1]:80Durum adını yanlış yazarsanız komut yalnızca tek satırlık bir [wrong state name] hatası bırakıp hemen sona erer. Aşağıda bilerek foo girildiğindeki sonuç var. Kullanabileceğiniz adları [ss -h] çıktısındaki TCP-STATES satırında görebilirsiniz.
ss -tn state fooss: wrong state name: foo📌 Başlıca seçenekler: bu yazıda çalıştırılan sonuçlar
| Seçenek | Görev | Bu yazıdaki sonuç | |
|---|---|---|---|
| -t | Yalnızca TCP soketlerini gösterir | Unix soketleri çıkar, port yerinde ssh ve https gibi servis adları görünür | |
| -n | Servis adı yerine port numarasını gösterir | ss -tn çıktısında ssh 22, https 443 olarak görünür | |
| -l | Yalnızca dinlemedeki (LISTEN) soketleri gösterir | ss -tln çıktısında 22, 80 ve 443 gibi dinlemedeki portlar görünür | |
| -u | Yalnızca UDP soketlerini gösterir | ss -uln çıktısının durum sütunu baştan sona UNCONN | |
| -p | Soketi kullanan programı Process sütununda gösterir | Normal hesapta yalnızca kendi hesabımın başlattığı python3 için ad ve pid görünür, başka hesapların programları boş kalır | |
| -s | Soket listesi yerine türlere göre sayıyı özetler | TCP satırındaki estab 9, state established çıktısının başlık satırı hariç 9 satırıyla aynı | |
| -4 | Yalnızca IPv4 soketlerini gösterir | ss -t4ln çıktısında [::] ile başlayan satırlar çıkar | |
| -6 | Yalnızca IPv6 soketlerini gösterir | ss -t6ln çıktısında 0.0.0.0 ve 127.0.0.1 ile başlayan satırlar çıkar | |
| -H | Başlık satırı olmadan yalnızca soket satırlarını gösterir | ss -H -tln | wc -l satır sayısına başlık satırı dahil edilmez | |
| state DURUM | Yalnızca o durumdaki soketleri bırakır | state established çıktısı State sütunu olmadan Recv-Q ile başlar; olmayan bir ad [wrong state name: foo] verir | |
| dport = :PORT | Karşı tarafın portuna göre süzer | dport = :443 ile dışarıdaki https sunucularına giden iki bağlantı satırı | |
| sport = :PORT | Kendi tarafınızın portuna göre süzer | -l ile birlikte kullanılan sport = :22 ile IPv4 ve IPv6 için iki adet 22 numaralı port dinleme satırı | |
| src ADRES | Yalnızca o adresin soketlerini bırakır | ss -tln src 127.0.0.1 ile yalnızca sunucu içinden bağlantı kabul eden 127.0.0.1 portları görünür |
📎 Diğer seçenekler: resmî kılavuza göre
| Seçenek | Görev | |
|---|---|---|
| -a, --all | Dinlemedeki ve bağlı soketleri birlikte gösterir | |
| -r, --resolve | Adresleri ve port numaralarını adlara çözerek gösterir | |
| -e, --extended | Her soket için uid ve inode gibi ayrıntılı bilgileri gösterir | |
| -o, --options | TCP yeniden iletimi ve keepalive gibi zamanlayıcı bilgilerini gösterir | |
| -m, --memory | Her soketin kullandığı belleği gösterir | |
| -i, --info | TCP iç bilgilerini (rtt, cwnd vb.) gösterir | |
| -x, --unix | Yalnızca Unix alan soketlerini gösterir | |
| -w, --raw | Yalnızca RAW soketlerini gösterir | |
| -f AİLE | unix, inet, inet6, link veya netlink gibi soket ailesine göre seçer | |
| -Q, --no-queues | Recv-Q ve Send-Q sütunları olmadan gösterir | |
| -K, --kill | Filtreye uyan soketleri zorla kapatır; çekirdeğin desteklemediği soketler atlanır | |
| -E, --events | Kapanan soketleri sürekli gösterir | |
| -V, --version | Sürüm bilgisini yazdırır |
🔲 ss komutu simülatörü
Aşağıdaki simülatörde şimdiye kadar gördüğünüz seçenekleri ve filtreleri kendiniz girip çıktıyı [netstat -tln] ile karşılaştırabilirsiniz.
5️⃣ ss soket özeti (-s)
-s, soket listesi yerine türlere göre sayıların özetini gösterir. man sayfasına göre listeyi tek tek saymaz, sayıları çeşitli istatistiklerden toplar.
ss -sTotal: 340
TCP: 48 (estab 9, closed 15, orphaned 0, timewait 13)
Transport Total IP IPv6
RAW 0 0 0
UDP 8 4 4
TCP 33 25 8
INET 41 29 12
FRAG 0 0 0TCP satırındaki estab, şu anda kurulu olan bağlantı sayısıdır. Bu yüzden aynı anda [state established] ile alınan satır sayısıyla karşılaştırabilirsiniz.
ss -tn state established | wc -l1010 satırlık çıktıdan bir başlık satırı çıkarılınca 9 satır kaldı ve bu, -s çıktısındaki estab 9 ile aynıydı. timewait 13, yalnızca [state time-wait] ile seçildiğinde görünen TIME-WAIT soketlerinin sayısıdır.
6️⃣ ss komutu ile netstat karşılaştırması
netstat komutunu içeren net-tools paketinin man sayfası netstat'ı neredeyse kullanılmayan bir program (mostly obsolete) olarak tanımlar ve yerine ss kullanılmasını önerir. Ancak netstat çıktı biçimine göre yazılmış betikler, ss'e geçildiğinde sütun sırası ve adres yazımı farklı olduğu için çıktıyı olduğu gibi okuyamaz.
Aynı sunucuda dinlemedeki TCP portlarını iki komutla gösterdiğimizde netstat durumu en sona koydu ve IPv6 adreslerini :::22 biçiminde yazdı.
netstat -tlnActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 :::80 :::* LISTEN
tcp6 0 0 :::443 :::* LISTENss'te ise durum en başa gelir ve IPv6 adresleri [::]:22 gibi köşeli parantez içine alınır.
ss -tlnState Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 511 0.0.0.0:80 0.0.0.0:*
LISTEN 0 511 0.0.0.0:443 0.0.0.0:*
LISTEN 0 511 127.0.0.1:8080 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 511 [::]:80 [::]:*
LISTEN 0 511 [::]:443 [::]:*Sık kullanılan netstat seçeneklerinin ss ve ip komutlarındaki karşılıkları aşağıdadır.
| netstat | Yerine geçen komut / gösterdiği |
|---|---|
| netstat -tln | ss -tlnDinlemedeki TCP portları, numara olarak |
| netstat -tulpn | ss -tulpnDinlemedeki TCP ve UDP portları ile programları |
| netstat -tan | ss -tanTüm TCP soketleri, numara olarak |
| netstat -r | ip routeYönlendirme tablosu |
| netstat -i | ip -s linkAğ arayüzü istatistikleri |
🔢 SSS & önerilen içerikler











ℹ️ Satış ortaklığı bildirimi
Bu sitenin içeriklerinde satış ortaklığı bağlantıları bulunur. Bir ziyaretçi bu bağlantılar üzerinden ürün veya hizmet satın alırsa bu site satıcıdan komisyon alır. Bu süreçte alıcının ödediği tutar (kampanya indirimlerinde tutar düşer↓) artmaz. Yayımlanan fiyat, indirim ve stok bilgileri yazının yazıldığı zamana aittir ve gerçek durumdan farklı olabilir; bu yüzden satın almadan önce son bilgiyi satıcıdan kontrol etmenizi rica ederiz. Ürünler kendi ölçütlerimize göre seçilir ve değerlendirilir; komisyon alınıp alınmaması tanıtım sırasını veya değerlendirme içeriğini etkilemez.