Що таке netstat і як перевірити з’єднання?
Автор: Редакція Domeny.ForSale Опубліковано
Коротко: netstat — це інструмент командного рядка, який показує мережеві з’єднання, порти, на яких програми очікують на трафік, та іншу інформацію про мережу. У Linux він зазвичай доступний у пакеті net-tools: команда sudo netstat -tulnp показує порти TCP і UDP та пов’язані з ними процеси. Для перевірки встановлених з’єднань TCP стане в пригоді sudo netstat -tnp, а сучасною альтернативою є ss.
Що показує netstat і коли він корисний?
netstat дає змогу перевірити, з якими адресами обмінюється даними комп’ютер і які програми надають мережеві послуги. Наприклад, він допомагає з’ясувати, чи працює вебсервер, чому застосунок не може зайняти порт або який процес підтримує з’єднання з іншим пристроєм.
Порт — це номер, який дає змогу спрямувати мережевий трафік до певної служби. Програма, що прослуховує порт, очікує на обмін даними, тоді як активне з’єднання TCP пов’язує конкретну локальну адресу й порт з адресою та портом іншої сторони.
netstat показує стан, видимий на комп’ютері, який ви перевіряєте. Сам результат не доводить, що служба доступна з інтернету: доступ може блокувати брандмауер, маршрутизатор або мережеві правила постачальника інфраструктури.
Як установити netstat у Linux?
Спочатку перевірте, чи інструмент уже працює:
netstat --version
Якщо оболонка повідомляє, що команду не знайдено, установіть пакет net-tools за допомогою менеджера пакетів вашого дистрибутива. Типові команди:
| Дистрибутив | Установлення |
|---|---|
| Debian, Ubuntu | sudo apt update && sudo apt install net-tools |
| Fedora | sudo dnf install net-tools |
| Arch Linux | sudo pacman -S net-tools |
| openSUSE | sudo zypper install net-tools |
Для встановлення потрібні права адміністратора. Якщо ви працюєте на сервері під адмініструванням іншої особи й не маєте доступу до sudo, попросіть адміністратора встановити інструмент або перевірте, чи доступна команда ss.
У багатьох сучасних системах Linux netstat не встановлюється за замовчуванням, а для діагностики з’єднань рекомендовано ss із пакета iproute2. netstat усе ще може бути корисним під час роботи зі старішими інструкціями та середовищами.
Як перевірити активні з’єднання?
Щоб показати з’єднання TCP без сокетів, які очікують на нові з’єднання, виконайте:
sudo netstat -tnp
Параметр -t вибирає TCP, -n виводить адреси й порти в числовому вигляді без визначення імен, а -p додає інформацію про процес. sudo дає змогу побачити також дані процесів інших користувачів; без відповідних прав частина інформації може бути недоступною.
У стовпці State зазначено стан з’єднання. ESTABLISHED означає встановлене з’єднання, SYN_SENT — спробу його встановити, а TIME_WAIT — стан після завершення з’єднання, коли система ще зберігає його дані. Сам по собі запис TIME_WAIT не означає несправності.
Якщо вас цікавлять лише встановлені з’єднання TCP, можна відфільтрувати результат:
sudo netstat -tnp | grep ESTABLISHED
Стовпець Local Address містить локальну адресу й порт, а Foreign Address — адресу й порт іншої сторони. UDP не встановлює з’єднання так, як TCP, тому його сокети не мають аналогічного стану ESTABLISHED. Для їх перевірки скористайтеся sudo netstat -unp.
Як знайти програми, що прослуховують порти?
Найпрактичніша команда для перевірки мережевих служб:
sudo netstat -tulnp
Параметр -l обмежує результат сокетами, що прослуховують порти, а -u додає UDP. Для TCP ви побачите стан LISTEN; у випадку UDP йдеться про сокети, які приймають дейтаграми, а не очікують на з’єднання в розумінні TCP.
Спрощений приклад запису може мати такий вигляд:
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2451/python3
Це означає, що процес python3 з ідентифікатором PID 2451 прослуховує порт 8080, але лише на локальному інтерфейсі зворотного зв’язку. PID — це ідентифікатор процесу, за яким можна перевірити його докладніше, наприклад командою ps -p 2451 -f.
Адреса, на якій програма прослуховує порт, має значення:
127.0.0.1:8080— служба доступна через локальну адресу IPv4, але не безпосередньо з інших комп’ютерів.0.0.0.0:8080— прослуховування на всіх локальних адресах IPv4.:::8080— прослуховування на всіх локальних адресах IPv6; підтримка IPv4 залежить від налаштувань системи та застосунку.
Не сприймайте адресу 0.0.0.0:* у стовпці Foreign Address як адресу віддаленого клієнта. Для сокета, що прослуховує порт, вона означає, що іншу сторону не визначено.
Приклад: застосунок не може зайняти порт 8080
Якщо застосунок повідомляє, що порт 8080 зайнятий, перевірте сокети TCP, які прослуховують порти:
sudo netstat -tlnp | grep ':8080 '
Знайдіть у результаті PID і назву програми, а потім перевірте процес командою ps -p PID -f, замінивши PID знайденим номером. З’ясуйте, чи це попередній екземпляр вашого застосунку, чи потрібна служба. Лише після цього зупиніть відповідну програму її стандартним способом або виберіть інший порт — не завершуйте невідомий процес тільки тому, що він заважає запуску.
Якщо netstat недоступний, аналогічну перевірку можна виконати за допомогою:
sudo ss -tulnp
Якщо виникла проблема з доступом з іншого комп’ютера, спочатку перевірте адресу прослуховування та процес, і лише потім — брандмауер і мережевий маршрут. Так ви зможете відрізнити проблему з роботою застосунку від проблеми з доступністю його порту.
Дивіться також: Домен і соціальні мережі — що має бути узгоджено?
