Командата ss е модерен заместител на класическия netstat. Можете да го използвате в Linux, за да получите статистически данни за вашите мрежови връзки. Ето как да работите с този удобен инструмент.
Съдържание
Командата ss срещу netstat
Заместител на остарелите netstat команда, ss ви дава подробна информация за това как вашият компютър комуникира с други компютри, мрежи и услуги.
ss показва статистически данни за Протокол за управление на предаването (TCP), Протокол за потребителска дейтаграма (UDP), Unix (междупроцес)и необработени гнезда. Необработени контакти оперират при мрежово ниво на OSI, което означава, че TCP и UDP заглавките трябва да се обработват от приложния софтуер, а не от транспортния слой. Протокол за интернет контролни съобщения (ICMP) съобщения и пинг и двете помощни програми използват необработени сокети.
Използването на ss
Не е нужно да инсталирате ss, тъй като той вече е част от актуална Linux дистрибуция. Изходът му обаче може да бъде много дълъг – имахме резултати, съдържащи над 630 реда. Резултатите също са много широки.
Поради това сме включили текстови представяния на резултатите, които получихме, тъй като те не биха се побрали в екранна снимка. Подрязахме ги, за да ги направим по-управляеми.
Изброяване на мрежови връзки
Използването на ss без опции от командния ред изброява гнезда, които не слушат. Тоест, той изброява гнездата, които не са в състояние на слушане.
За да видите това, въведете следното:
ss
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 /run/systemd/journal/stdout 35689 * 35688 u_str ESTAB 0 0 * 35550 * 35551 ... u_str ESTAB 0 0 * 38127 * 38128 u_str ESTAB 0 0 /run/dbus/system_bus_socket 21243 * 21242 u_str ESTAB 0 0 * 19039 * 19040 u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306 icmp6 UNCONN 0 0 *:ipv6-icmp *:* udp ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps
Колоните са както следва:
Netid: Типът на гнездото. В нашия пример имаме „u_str“, Unix поток, „udp“ и „icmp6“, IP версия 6 ICMP сокет. Можете да намерите още описания на Типове сокети за Linux в man страниците на Linux.
Състояние: Състоянието, в което се намира гнездото.
Recv-Q: Броят на получените пакети.
Send-Q: Броят изпратени пакети.
Локален адрес:Порт: Локалният адрес и порт (или еквивалентни стойности за Unix сокети).
Peer Address:Port: Отдалеченият адрес и порт (или еквивалентни стойности за Unix сокети).
За UDP сокети колоната „Състояние“ обикновено е празна. За TCP сокети може да бъде едно от следните:
СЛУШАЙТЕ: Само от страна на сървъра. Сокетът чака заявка за свързване.
SYN-SENT: Само от страна на клиента. Този сокет направи заявка за свързване и чака да види дали е приета.
SYN-RECEIVED: Само от страна на сървъра. Този сокет чака потвърждение на връзката, след като приеме заявка за свързване.
УСТАНОВЕНО: Сървър и клиенти. Установена е работеща връзка между сървъра и клиента, което позволява прехвърляне на данни между двамата.
FIN-WAIT-1: Сървър и клиенти. Този сокет очаква заявка за прекратяване на връзката от отдалеченото гнездо или потвърждение на заявка за прекратяване на връзката, която преди това е била изпратена от този сокет.
FIN-WAIT-2: Сървър и клиенти. Този сокет чака заявка за прекратяване на връзката от отдалечения сокет.
ЗАТВОРИ-ЧАКАЙТЕ: Сървър и клиент. Този сокет очаква заявка за прекратяване на връзката от локалния потребител.
ЗАТВАРЯВАНЕ: Сървър и клиенти. Този сокет чака потвърждение на заявка за прекратяване на връзката от отдалечения сокет.
ПОСЛЕДНО ОТКАЗВАНЕ: Сървър и клиент. Този сокет чака потвърждение на заявката за прекратяване на връзката, която е изпратила към отдалечения сокет.
ВРЕМЕ-ЧАКАЙТЕ: Сървър и клиенти. Този сокет изпрати потвърждение до отдалечения сокет, за да го уведоми, че е получил искането за прекратяване на отдалечения сокет. Сега чака да се увери, че е получено потвърждението.
ЗАТВОРЕНО: Няма връзка, така че гнездото е прекратено.
Изброяване на гнезда за слушане
За да видим гнездата за слушане, ще добавим опцията -l (слушане), така:
ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 4096 /run/systemd/private 13349 * 0 u_seq LISTEN 0 4096 /run/udev/control 13376 * 0 u_str LISTEN 0 4096 /tmp/.X11-unix/X0 33071 * 0 u_dgr UNCONN 0 0 /run/systemd/journal/syslog 13360 * 0 u_str LISTEN 0 4096 /run/systemd/fsck.progress 13362 * 0 u_dgr UNCONN 0 0 /run/user/1000/systemd/notify 32303 * 0
Всички тези контакти не са свързани и слушат. „rtnl“ означава маршрутизираща мрежова връзка, която се използва за прехвърляне на информация между процесите на ядрото и потребителското пространство.
Изброяване на всички гнезда
За да изброите всички гнезда, можете да използвате опцията -a (всички):
ss -a
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process nl UNCONN 0 0 rtnl:NetworkManager/535 * nl UNCONN 0 0 rtnl:evolution-addre/2987 * ... u_str LISTEN 0 100 public/showq 23222 * 0 u_str LISTEN 0 100 private/error 23225 * 0 u_str LISTEN 0 100 private/retry 23228 * 0 ... udp UNCONN 0 0 0.0.0.0:631 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* ... tcp LISTEN 0 128 [::]:ssh [::]:* tcp LISTEN 0 5 [::1]:ipp [::]:* tcp LISTEN 0 100 [::1]:smtp [::]:*
Изходът съдържа всички гнезда, независимо от състоянието.
Изброяване на TCP сокети
Можете също да приложите филтър, така че да се показват само съвпадащи гнезда. Ще използваме опцията -t (TCP), така че ще бъдат изброени само TCP сокети:
ss -a -t
Изброяване на UDP сокети
Опцията -u (UDP) изпълнява същия тип филтриране. Този път ще видим само UDP сокети:
ss -a -u
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process UNCONN 0 0 0.0.0.0:631 0.0.0.0:* UNCONN 0 0 0.0.0.0:mdns 0.0.0.0:* UNCONN 0 0 0.0.0.0:60734 0.0.0.0:* UNCONN 0 0 127.0.0.53%lo:domain 0.0.0.0:* ESTAB 0 0 192.168.4.28%enp0s3:bootpc 192.168.4.1:bootps UNCONN 0 0 [::]:mdns [::]:* UNCONN 0 0 [::]:51193 [::]:*
Изброяване на Unix сокети
За да видите само Unix сокети, можете да включите опцията -x (Unix), както е показано по-долу:
ss -a -x
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process u_str ESTAB 0 0 * 41826 * 41827 u_str ESTAB 0 0 * 23183 * 23184 u_str ESTAB 28 0 @/tmp/.X11-unix/X0 52640 * 52639 ... u_str ESTAB 0 0 /run/systemd/journal/stdout 18887 * 18885 u_str ESTAB 0 0 /run/dbus/system_bus_socket 19273 * 17306
Изброяване на необработени сокети
Филтърът за необработени сокети е опцията -w (raw):
ss -a -w
Изброяване на IP версия 4 гнезда
Сокетите, използващи протокола TCP/IP версия 4, могат да бъдат изброени чрез опцията -4 (IPV4):
ss -a -4
Изброяване на IP версия 6 гнезда
Можете да включите съответстващия филтър IP версия 6 с опцията -6 (IPV6), както следва:
ss -a -6
Изброяване на сокети по щат
Можете да изброите сокетите според състоянието, в което се намират с опцията за състояние. Това работи с установени, слушащи или затворени състояния. Ще използваме и опцията за разрешаване (-r), която се опитва да раздели мрежовите адреси към имена и портове към протоколи.
Следната команда ще търси установени TCP връзки и ss ще се опита да разреши имената:
ss -t -r state established
Изброени са четири връзки, които са в установено състояние. Името на хост, ubuntu20-04, е разрешено и „ssh“ се показва вместо 22 за SSH връзката на втория ред.
Можем да повторим това, за да потърсим гнезда в състояние на слушане:
ss -t -r state listening
Recv-Q Send-Q Local Address:Port Peer Address:Port Process 0 128 localhost:5939 0.0.0.0:* 0 4096 localhost%lo:domain 0.0.0.0:* 0 128 0.0.0.0:ssh 0.0.0.0:* 0 5 localhost:ipp 0.0.0.0:* 0 100 localhost:smtp 0.0.0.0:* 0 128 [::]:ssh [::]:* 0 5 ip6-localhost:ipp [::]:* 0 100 ip6-localhost:smtp [::]:*
Изброяване на сокети по протокол
Можете да изброите гнездата, като използвате конкретен протокол с опциите dport и sport, които представляват портовете на дестинацията и източника, съответно.
Пишем следното, за да изброим сокети, използващи протокола HTTPS при установена връзка (обърнете внимание на пространството след отварящата скоба и преди затварящата):
ss -a state established ‘( dport = :https or sport = :https )’
Можем да използваме името на протокола или порта, обикновено асоцииран с този протокол. Портът по подразбиране за Сигурна обвивка (SSH) е порт 22.
Ще използваме името на протокола в една команда и след това ще го повторим, използвайки номера на порта:
ss -a ‘( dport = :ssh or sport = :ssh )’
ss -a ‘( dport = :22 or sport = :22 )’
Както се очакваше, получаваме същите резултати.
Изброяване на връзки към конкретен IP адрес
С опцията dst (дестинация) можем да изброим връзки към конкретен IP адрес на местоназначение.
Пишем следното:
ss -a dst 192.168.4.25
Идентифициращи процеси
За да видите кои процеси използват сокетите, можете да използвате опцията за процеси (-p), както е показано по-долу (обърнете внимание, че трябва да използвате sudo):
sudo ss -t -p
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process ESTAB 0 0 192.168.4.28:57650 54.218.19.119:https users:(("firefox",pid=3378,fd=151)) ESTAB 0 0 192.168.4.28:ssh 192.168.4.25:43946 users:(("sshd",pid=4086,fd=4),("sshd",pid=3985,fd=4))
Това ни показва, че двете установени връзки на TCP сокети се използват от SSH демона и Firefox.
Достоен наследник
Командата ss предоставя същата информация, предоставена преди от netstat, но по по-опростен и достъпен начин. Можете да разгледате man страница за повече опции и съвети.